Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS6中将自定义图层添加到UITableViewCell_Ios_Uitableview_Ios6 - Fatal编程技术网

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

如何在iOS6中将自定义图层添加到UITableViewCell,ios,uitableview,ios6,Ios,Uitableview,Ios6,我有一个带有自定义类的原型单元,我想在第一次初始化单元时,而不是每次重用单元时,在单元上额外绘制几层。在过去,我会通过实现awakeFromNib来实现这一点。我希望能够访问单元格中视图的框架,以便在新图层图形中使用它们的尺寸,但在iOS6中,在awakeFromNib方法中,子视图的框架宽度/高度都为0。我怀疑这与我还没有真正理解的新的约束布局有关 - (void)awakeFromNib { [super awakeFromNib]; // We only want to d

我有一个带有自定义类的原型单元,我想在第一次初始化单元时,而不是每次重用单元时,在单元上额外绘制几层。在过去,我会通过实现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)。如何在每个单元格中绘制一次此虚线层,并使用现有水平分隔符视图的宽度来确定线的长度

更新

我发现我可以使用superview上的约束来计算子视图上的尺寸,但我仍然希望有人能告诉我一个更好的解决方案,它不会对约束配置进行假设

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;
    }
}

我有一个临时黑客,在我第一次布局时在cell实例上设置一个初始标志,这样我只画一次层,但我想知道是否有更好的方法。这可能有助于查看addDottedLine中发生了什么。是否将CALAyer添加为horizontalSeparator层的子层?iOS中的CALayer不支持布局管理器,因此如果您想确保CALayer的宽度(减去边距)与包含它的视图相同,您可能需要进行一些子类化并覆盖LayoutSubview:这里有更多关于这个问题的信息:是的-这正是我正在做的。我的意图是让设计师在IB中调整视图的大小/布局,然后根据他们创建的视图的大小进行自定义绘制(如虚线)。视图在绘制一次后不会调整大小,因此我希望在视图或UITableViewCell层(即不是UIViewControllers ViewWillDisplay)上会有一些回调,在所有子视图都通过约束进行布局后会调用这些回调。我将创建一个完整的dottedLineView,它通过layoutSubviews动态管理布局。