2014-10-07 52 views
1

我剛剛更新了Objective-C iOS應用程序以使用「新」iOS 8故事板。在更新所有約束之後,我注意到,在滾動時,一些標題標籤(海關單元)似乎縮進,我不希望它們做什麼。當我改變滾動方向時似乎總是發生,但我不完全確定如何重現它。我不知道在哪裏尋找解決方案,但我很確定它與限制條件沒有任何關係。下面是一些細胞的圖片。前兩個是正確縮進,最後兩個沒有。UITableViewCell標籤不需要的縮進

我能做些什麼來防止這種縮進?

Indented cell labels

+0

發表了一些代碼,其難以幫助你沒有代碼 – Elgert 2014-10-07 14:37:43

+1

試試這個,http://stackoverflow.com/a/19499442/691626 – 2014-10-07 16:55:12

回答

2

在你cellForRowAtIndexPath的方法,你可以改爲添加一個標籤到你的細胞與自定義文本子視圖。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] init]; 
    } 

    UILabel *title = [[UILabel alloc] init]; 
    title.text = @"my text"; 
    title.frame = CGRectMake(0,0,desiredWidth,rowHeight); // setting the origin at (0,0) should position the label over that indentation you don't want 
    [titleview addSubview:title]; 

    return cell; 
} 
0

您是否以編程方式更改視圖框架或某些其他用戶界面?

如果您使用自動佈局並以編程方式更改視圖,有時會發生這種情況。

+0

不,我不是。我只使用約束來定位我的觀點。 – Linus 2014-10-09 07:42:34

+0

好的。請張貼你寫的部分代碼。還請說明您添加了哪些限制條件。我試着用標籤和自動佈局打開自定義tableviewcell。它的工作正常。 – Neha 2014-10-10 03:53:26

0

我也遇到了這個問題,並做了一些研究。

重現它,它似乎需要一個自定義表格視圖單元格,使用自動佈局佈置其子視圖。滾動表格視圖時滾動方向發生變化,並且受影響的單元格移動到可見屏幕之外,並隨後再次返回到視圖中,而在方向改變期間手指沒有從屏幕上擡起。

明顯的第一個嫌疑犯是細胞再利用。在像這樣的自定義單元實現覆蓋prepareForReuse似乎解決了這個問題:

-(void)prepareForReuse{ 
    [super prepareForReuse]; 
    [self layoutSubviews]; 
} 

問題是這是否是一個錯誤。看起來好像發生了一些事情,當一個單元排隊等待重用時,會使自動佈局約束無效。進一步的研究(斷點,NSLog等)表明,所有的佈局約束保持正確的值。從那裏得出結論,layoutSubviews可能可能解決問題,事實證明是這樣的。

這是一個錯誤?也許不會。 The docs for prepareForReuse說:

出於性能原因,您應該只重置與內容無關的單元格屬性,例如alpha,編輯和選擇狀態。 tableView:cellForRowAtIndexPath:中的表視圖委託在重新使用單元時應始終重置全部內容

這樣的一個嚴格的解釋是,當自動佈局涉及您可能必須重新leyout中的tableView:通過對來自那裏的細胞調用layoutSubviews,因爲汽車佈局限制部分:的cellForRowAtIndexPath的內容。這似乎也表明prepareForReuse可能不是重新佈局的預期位置。無論如何,如果有人知道更多的細節,哪種方式更好,這兩種方式似乎都能完成這項工作,請隨時發表評論。