我有一个自定义UITableViewCell
子类,它在 Interface Builder 中应用了自动布局约束。该单元格包含多个视图,包括一个UITextField
.
相关地,它的大小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
编辑2:
如此处所示的顶部单元格正确显示(与底部单元格一样),直到我向下滚动屏幕。从此消失了。
这反映了第一次编辑时的问题 - 这是第二次渲染的问题(让我认为它可能与重用单元格有关?)