我有一个自定义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