Autolayout不使用可重用的tableview单元格

时间:2013-09-21 16:08:36

标签: iphone ios uitableview tableview autolayout

我正在尝试使用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;
}

当表格视图首次加载时,它正确加载:

enter image description here

但是,在桌子滚动后,Autolayout会破坏:

enter image description here

以下是限制因素:

enter image description here

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我有完全相同的问题。让我发疯,因为在细胞重复使用之前,一切看起来都很棒。

我发现调整大小的视图不是单元格本身(总是屏幕宽度),而是我拥有的内部内容视图。您可以使用NSLog(@"%@", [theView constraints]);打印任何视图上的所有约束,这有助于调试

也试着无济于事:

  • 将所有重要的观看次数和子视图设置为translatesAutoresizingMaskIntoConstraints=NO

  • -(void)prepareForReuse

  • 中手动设置界限
  • 致电setNeedsUpdateConstraints

问题在于我已将我的内部卡片视图"contentView"命名为UITableViewCell中已命名的视图。更改它修复了调整大小问题。

答案 1 :(得分:0)

您的方法的问题是静态前导和尾随。您的尾随常量为200,当您旋转它时,您希望它变得超过200(因为屏幕的宽度)。这打破了约束,可能在控制台中说你的约束条件含糊不清,它会自动添加一个新的约束(导致奇怪的行为)。

  • 所以我建议尝试使用尾随约束大于或等于200 并查看它是否有效。
  • 另一个解决方案是为该蓝色视图添加宽度约束并删除尾随约束。

我希望这有帮助!