0

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

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

有什么想法吗?

4

2 回答 2

0

使用自动布局时,单元格缩进不能开箱即用。看到这个问题。

于 2013-02-13T23:49:50.747 回答
0

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

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

  1. IBOutlet为您的标签和左侧水平约束创建一个,方法是按住 CTRL 键从 Interface Builder 中的每一个拖动到UITableViewCell子类的头文件,调用它们“ label”和“ leftHorizontalConstraint”(以匹配下面的代码,或使用您自己的名称和更改代码。

  2. 在您的覆盖子类中UITableViewCellawakeFromNib添加此代码;


   // 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 现在允许您删除系统生成的约束。

于 2013-07-10T10:54:07.270 回答