我剛剛更新了Objective-C iOS應用程序以使用「新」iOS 8故事板。在更新所有約束之後,我注意到,在滾動時,一些標題標籤(海關單元)似乎縮進,我不希望它們做什麼。當我改變滾動方向時似乎總是發生,但我不完全確定如何重現它。我不知道在哪裏尋找解決方案,但我很確定它與限制條件沒有任何關係。下面是一些細胞的圖片。前兩個是正確縮進,最後兩個沒有。UITableViewCell標籤不需要的縮進
我能做些什麼來防止這種縮進?
我剛剛更新了Objective-C iOS應用程序以使用「新」iOS 8故事板。在更新所有約束之後,我注意到,在滾動時,一些標題標籤(海關單元)似乎縮進,我不希望它們做什麼。當我改變滾動方向時似乎總是發生,但我不完全確定如何重現它。我不知道在哪裏尋找解決方案,但我很確定它與限制條件沒有任何關係。下面是一些細胞的圖片。前兩個是正確縮進,最後兩個沒有。UITableViewCell標籤不需要的縮進
我能做些什麼來防止這種縮進?
在你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;
}
我也遇到了這個問題,並做了一些研究。
重現它,它似乎需要一個自定義表格視圖單元格,使用自動佈局佈置其子視圖。滾動表格視圖時滾動方向發生變化,並且受影響的單元格移動到可見屏幕之外,並隨後再次返回到視圖中,而在方向改變期間手指沒有從屏幕上擡起。
明顯的第一個嫌疑犯是細胞再利用。在像這樣的自定義單元實現覆蓋prepareForReuse似乎解決了這個問題:
-(void)prepareForReuse{
[super prepareForReuse];
[self layoutSubviews];
}
問題是這是否是一個錯誤。看起來好像發生了一些事情,當一個單元排隊等待重用時,會使自動佈局約束無效。進一步的研究(斷點,NSLog等)表明,所有的佈局約束保持正確的值。從那裏得出結論,layoutSubviews可能可能解決問題,事實證明是這樣的。
這是一個錯誤?也許不會。 The docs for prepareForReuse說:
出於性能原因,您應該只重置與內容無關的單元格屬性,例如alpha,編輯和選擇狀態。 tableView:cellForRowAtIndexPath:中的表視圖委託在重新使用單元時應始終重置全部內容。
這樣的一個嚴格的解釋是,當自動佈局涉及您可能必須重新leyout中的tableView:通過對來自那裏的細胞調用layoutSubviews,因爲汽車佈局限制是部分:的cellForRowAtIndexPath的內容。這似乎也表明prepareForReuse可能不是重新佈局的預期位置。無論如何,如果有人知道更多的細節,哪種方式更好,這兩種方式似乎都能完成這項工作,請隨時發表評論。
發表了一些代碼,其難以幫助你沒有代碼 – Elgert 2014-10-07 14:37:43
試試這個,http://stackoverflow.com/a/19499442/691626 – 2014-10-07 16:55:12