如何在iOS6中向UITableViewCell添加自定义图层

时间:2013-01-28 22:20:27

标签: ios uitableview ios6

我有一个带有自定义类的原型单元格,我希望在单元格首次初始化时在单元格上绘制一些额外的图层,而不是每次重复使用单元格时。在过去,我会通过实现awakeFromNib来完成这项工作。我希望能够访问单元格中视图的框架,以便在新的图层绘图中使用它们的尺寸,但是对于iOS6,子视图在awakeFromNib方法中的框架宽度/高度均为0。我怀疑它与新的约束布局有关,我还不太了解。

- (void)awakeFromNib {
    [super awakeFromNib];
    // We only want to draw this dotted line once
    CGPoint start = CGPointZero;
    CGPoint end = CGPointMake(self.horizontalSeparator.frame.size.width, 0);
    // Category that creates a layer with a dotted line and adds it to the view.
    [self.horizontalSeparator addDottedLine:start to:end];
}

在awakeFromNib中,horizo​​ntalSeparator.frame =(0 100; 0 0)。如何在每个单元格中绘制一个虚线图层,并使用现有horizo​​ntalSeparator视图的宽度来确定线条的长度?

更新

我发现我可以使用superview上的约束来计算子视图的维度,但我仍然希望有人能指出我更好的解决方案,而不是对约束配置做出假设。 / p>

for (NSLayoutConstraint *constraint in self.constraints) {
    if (// Find a constraint for the horizontalSeparator
        (constraint.firstItem == self.horizontalSeparator
         || constraint.secondItem == self.horizontalSeparator)
        && // Make sure it affects the leading or trailing edge.
        (constraint.firstAttribute == NSLayoutAttributeLeading
         || constraint.firstAttribute == NSLayoutAttributeTrailing)) {
               CGFloat margin = constraint.constant;
               CGPoint start = CGPointZero;
               CGPoint end = CGPointMake(self.frame.size.width - (2 * margin), 0);
               [self.horizontalSeparator addDottedLine:start to:end];
               _isInitialized = YES;
               break;
    }
}

0 个答案:

没有答案