这个问题似乎是 AutoLayout 中的一个错误,其中系统生成的左水平约束绑定在标签和单元格的视图之间,而不是单元格的contentView
. 这可能已在 XCode 5 中修复。
很多人似乎都说关闭 AutoLayout 就是答案,但是你失去了 AutoLayout 的所有好处,只是为了修复一个自定义单元格的缩进。它实际上很容易用四行代码(和两行IBOutlet
,其中一个你可能已经拥有)来修复;
IBOutlet
为您的标签和左侧水平约束创建一个,方法是按住 CTRL 键从 Interface Builder 中的每一个拖动到UITableViewCell
子类的头文件,调用它们“ label
”和“ leftHorizontalConstraint
”(以匹配下面的代码,或使用您自己的名称和更改代码。
在您的覆盖子类中UITableViewCell
并awakeFromNib
添加此代码;
// Remove the constraint that you can't delete in IB (XCode 4)
[self removeConstraint:self.leftHorizontalConstraint];
//Create a dictionary of variable name bindings
NSDictionary *labelDict = NSDictionaryOfVariableBindings(_label);
//Create a horizontal constraint for the label, 20 points from the left edge of its container
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[_label]" options:0 metrics:nil views:labelDict];
//Add the constraint to the containerView
[self.contentView addConstraints:constraints];
当然,如果 IB 一开始就生成了 label 和 containerView 之间的约束,那会容易很多。我在 XCode 5 中修复了这个问题,但我还没有测试过。您至少应该能够使用 XCode 5 手动删除约束,因为 IB 现在允许您删除系统生成的约束。