2013-02-13 46 views
0

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

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

有什么想法?

回答

0

使用自动布局时,单元格缩进功能无法使用。请参阅this的问题。

0

该问题似乎是AutoLayout中的一个错误,系统生成的左侧水平约束与标签和单元格视图之间相关,与单元的contentView相反。这可能已经在XCode 5中修复了。

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

  1. 为您的标签,并从他们每个人在Interface Builder CTRL拖动到你UITableViewCell子类的头文件,你的左水平约束创建IBOutlet,称他们为“label”和“leftHorizontalConstraint”(以代码符合以下,或者使用自己的姓名和更改代码

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