我有一個自定義UITableViewCell
子類,它已經在Interface Builder中應用了自動佈局約束。該單元格包含多個視圖,其中包括UITextField
。已出隊UITableViewCell佈局不正確,直到滾動(使用自動佈局)
相關地,UITextField
的大小受到限制,使得其與下一個視圖之間存在默認水平間距。
小區被實例化等如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ProgressCell";
ProgressCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath]
cell.textField.text = @"Some string that is different for each cell";
return cell;
}
當電池第一次出現,則UITextField
超支正確的幀,並顯示UIView
其右側的後面。但是,當我從屏幕上滾動單元格時,暫停,然後向後滾動,文本將被正確截斷。
下面顯示了一個示例(在第二次編輯時)。
我曾嘗試致電[cell setNeedsLayout]
和[cell setNeedsDisplay]
爲cellForRowAtIndexPath
中的單元格,並在延遲後執行它們。兩者都不是有效的。
什麼是滾動屏幕,導致單元格顯示正確,我該如何複製或修復潛在問題?
編輯:
調用
[self.tableView reloadData];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
以便重新加載單元,會出現以使佈局出現正確的第一次。
但是,它現在休息(偶爾)在滾動(即滾動備份時,佈局約束現在不正確應用)。
調用[cell setNeedsLayout]
在cellForRowAtIndexPath
似乎不能解決此問題。
EDIT2:
頂部電池,如圖here,正確顯示(作爲底電池那樣),直到我向下滾動屏幕。它消失了。
這反映了一個問題,因爲第一次編輯的 - 這是第二渲染。如果你的名字上的屬性,這是問題(讓我覺得它可能是與重用細胞?)
您是否獲得有關在控制檯的約束任何警告,
tableView.estimatedRowHeight
採用低值降低了錯誤的發生你可以包含一些截圖嗎? – jrturton 2013-02-21 08:06:30
@rdelmar如果你感興趣,我寫了我的Autolayout類別(以前不曾討論過?):http://commandshift.co.uk/blog/2013/02/20/creating-individual-layout-constraints/ – jrturton 2013-02-21 08:08:58