我有一个带有自定义类的原型单元格,我希望在单元格首次初始化时在单元格上绘制一些额外的图层,而不是每次重复使用单元格时。在过去,我会通过实现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中,horizontalSeparator.frame =(0 100; 0 0)。如何在每个单元格中绘制一个虚线图层,并使用现有horizontalSeparator视图的宽度来确定线条的长度?
更新
我发现我可以使用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;
}
}