我必须为UIView绘制自定义边框。
我已经有了代码来执行此操作,但它是在我们开始使用autolayout之前编写的。
代码基本上添加了一个宽度/高度= 1.0f
的子图层-(void)BordeIzquierdo:(UIColor *)pcColor cfloatTamanio:(CGFloat )pcfloatTamanio
{
CALayer* clElemento = [self layer];
CALayer *clDerecho = [CALayer layer];
clDerecho.borderColor = [UIColor darkGrayColor].CGColor;
clDerecho.borderWidth = pcfloatTamanio;
clDerecho.frame = CGRectMake(0, 1, pcfloatTamanio, self.frame.size.height);
[clDerecho setBorderColor:pcColor.CGColor];
[clElemento addSublayer:clDerecho];
}
现在的问题是,使用自动布局,这发生在layoutSubViews之前。所以UIView.layer.frame
是(0,0; 0,0)所以添加的子图层没有显示,因为它有宽度/高度= 0.0f
现在,如何在不将此自定义绘图转移到viewDidLoad
之后执行的另一个方法(例如didLayoutSubviews
)的情况下创建此代码。
我希望在调用viewDidLoad
之前正确应用此样式。
CALayers
用于自动布局限制吗?答案 0 :(得分:5)
iOS中没有CALayer自动调整或约束。 (在Mac OS X上有,但在iOS中没有。)
这里的要求不合理。你说你拒绝将呼叫转移到BordeIzquierdo:
。但是,在您知道clDerecho
(因此self
)的大小之前,无法给self.layer
正确的大小。 Cocoa touch编程的一半技巧就是将代码放在正确的位置。您必须找到将呼叫置于BordeIzquierdo:
的正确位置,以便您所需的值在被调用时具有意义。
我会做的是将它放在layoutSubviews
和BOOL标志中,这样你只需要做一次。