UITableViewCell“不会”在编辑模式下缩进?

时间:2013-02-13 21:56:09

标签: uitableview ios6 autolayout

我正在使用Xcode(最新版本)构建iOS6,而在Interface Builder中,我现在创建了一个只有几个标签的自定义单元格。我希望标签“缩进”而不是被左侧的删除符号覆盖,右边的“重新排序单元格行”符号。在IB中我注意到一个复选框被检查,说在编辑时缩进也设置为10,并且由于某种原因,这仍然不起作用?我们现在还必须将“内容视图”拖到画布上吗?我认为那是开箱即用的。此外,我无法改变我的细胞高度,即使这也是IB的一个选项。这可能是因为新的自动布局系统?我知道我有一个单元格背景,因为我在创建它时会非常轻微地改变每个其他单元格的颜色。我也在IB内部将选择颜色更改为灰色,这也是有效的。

我已经四处寻找,每个人都在问“如何阻止它缩进”我希望它发生而不是。

有什么想法?

2 个答案:

答案 0 :(得分:0)

使用自动布局时,单元格缩进不能立即使用。请参阅this问题。

答案 1 :(得分:0)

问题似乎是AutoLayout中的一个错误,其中系统生成的左水平约束绑定在标签和单元格的视图之间,而不是单元格的contentView。这可能已在XCode 5中修复。

很多人似乎都说关闭AutoLayout就是答案,但是你会失去AutoLayout的所有好处,只是为了修复一个自定义单元格的缩进。它实际上很容易通过四行代码(以及两个IBOutlet来修复,其中一行代码可能已经存在);

  1. 通过CTRL将Interface Builder中的每一个拖放到IBOutlet子类的头文件中,为您的标签和左侧水平约束创建UITableViewCell,并将其称为“label {1}}“和”leftHorizontalConstraint“(以匹配以下代码,或使用您自己的名称并更改代码。

  2. UITableViewCell的子类awakeFromNib上方并添加此代码;

  3. 
       // 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首先在标签和containerView之间生成约束,那将会容易得多。我将在XCode 5中修复,但我还没有测试过。您至少应该能够使用XCode 5手动删除约束,因为IB现在允许您删除系统生成的约束。