自动布局不适用于可重用的表格视图单元格
Posted
技术标签:
【中文标题】自动布局不适用于可重用的表格视图单元格【英文标题】:Autolayout not working with reusable tableview cells 【发布时间】:2013-09-21 16:08:35 【问题描述】:我正在尝试使用 Autolayout 和 Interface Builder 创建自定义 TableViewCell。我在 viewDidLoad 中设置了我的单元格,如下所示:
[tableView registerNib:[UINib nibWithNibName:@"BChatCell" bundle:Nil] forCellReuseIdentifier:@"ChatCell"];
然后我像这样使单元格出列:
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath: (NSIndexPath *)indexPath
BChatCell * cell = [tableView_ dequeueReusableCellWithIdentifier:@"ChatCell"];
return cell;
当表格视图第一次加载时,它会正确加载:
但是,表格滚动后,自动布局中断:
以下是限制条件:
任何帮助将不胜感激。
【问题讨论】:
你需要显示更多的约束,也许检查你是否将translateAutoResizeMaskToConstraints
设置为 NO。
我尝试关闭自动调整大小的蒙版,但它完全破坏了自动布局。
约束对我来说看起来不错,BChatCell
中的任何空间?
有人对此有所了解吗?我现在遇到了,找不到解决办法。
到目前为止我还没有找到解决方案。我只是用框架来布置我的单元格。
【参考方案1】:
我遇到了完全相同的问题。快把我逼疯了,因为在细胞被重复使用之前,一切看起来都很棒。
我发现正在调整大小的视图不是单元格本身(始终是屏幕宽度),而是我拥有的内部内容视图。您可以使用 NSLog(@"%@", [theView constraints]);
在任何视图上打印所有约束,这有助于调试
也试过无济于事:
将所有重要视图和子视图设置为translatesAutoresizingMaskIntoConstraints=NO
在-(void)prepareForReuse
内手动设置边界
致电setNeedsUpdateConstraints
问题是我已将我的内部卡片视图命名为 "contentView"
,它已经是 UITableViewCell
中的命名视图。更改它修复了调整大小的问题。
【讨论】:
【参考方案2】:您的方法的问题是静态的前导和尾随。您的尾随常数是 200,当您旋转它时,您希望它变得超过 200(因为屏幕的宽度)。这打破了约束,可能在控制台中说你的约束有歧义,它会自动添加一个新的约束(这会导致奇怪的行为)。
所以我的建议是尝试使尾随约束大于或等于 200 并查看它是否有效。 另一种解决方案是为该蓝色视图添加宽度约束并删除尾随约束。我希望这会有所帮助!
【讨论】:
旋转屏幕时这不是问题。滚动表格时会出现问题。此外,如果我确实旋转了屏幕,预期的行为将是蓝色方块扩大。我不知道它怎么能打破约束? 这真的很奇怪。旋转后是否有任何控制台错误?通常当出现问题时,它会抛出某种类型的异常并处理它(以一种糟糕的方式)。 嗨萨米,如果你仔细看看原来的问题,这不是屏幕旋转的问题。当细胞被重复使用时,它们会失去约束,这是一个问题。没有任何错误消息。 @BenSmiley 试试这个 [cell setNeedsLayout:YES];在你的 cellForRowAtIndexPath: 返回之前。以上是关于自动布局不适用于可重用的表格视图单元格的主要内容,如果未能解决你的问题,请参考以下文章