已出队UITableViewCell布局不正确,直到滚动(使用自动布局)
我有一个自定义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,正确显示(作为底电池那样),直到我向下滚动屏幕。它消失了。
这反映了一个问题,因为第一次编辑的 - 这是第二渲染。如果你的名字上的属性,这是问题(让我觉得它可能是与重用细胞?)
UITableViewCell
子类textLabel
或defaultTextLabel
,那么IB将忽略您指定的约束并用默认约束覆盖它们,而不会发出警告。
甚至在IB中使用自定义样式设计的单元格上也是如此,它没有可见的textLabel
或detailTextLabel
属性。
如果在UITableViewCell
子类中添加UIImageView
类型属性并将其命名为imageView
,也会发生这种情况。
根据这个multiple lines UILabel
GitHub issue,这是一个持续不断的iOS错误。
我发现在iOS 9+中,这种情况大多发生在编辑模式下,具有很多不可预测性。
以下解决方法仅部分起作用:它需要重绘两次UITableView
,但仍未涵盖所有方案。
override func viewDidLoad() {
super.viewDidLoad()
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
tableView.reloadData()
}
注:
- 使用
UITextView
是一个伟大的替代多行UILabel
,没有错误。UITextView
也没有出现任何IULabel
其他奇怪,如alignment errors或flickering。 - SO-25947146还有一个替代解决方案,它不适合我,但值得一提。
- 似乎当
self.tableView.editing
是true
- 上SwiftArchitect/TableViewControllerRowHeightBug要点
您是否获得有关在控制台的约束任何警告,
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