我必须为UIView绘制一个自定义边框。
我已经有了这样做的代码,但它是在我们开始使用自动布局之前编写的。
代码基本上添加了一个width/height=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)所以添加的子图层没有显示出来因为它的width/height=0.0f
现在我怎么能使这段代码不转移这个自定义绘图到viewDidLoad
之后执行的另一个方法,如didLayoutSubviews
。
我希望在调用viewDidLoad
之前正确应用此样式。
- 有什么像自动布局约束,我可以使用
CALayers
? - 还有其他想法吗?
iOS中没有callayer自动调整大小或限制。(Mac OS X有,iOS没有)
你们的要求是不合理的。你说你拒绝把呼叫移到BordeIzquierdo:
。但是你不能给clDerecho
一个正确的大小,直到你知道self
的大小(因此self.layer
)。Cocoa触摸编程的一半艺术在于将代码放在正确的位置。您必须找到正确的位置来调用BordeIzquierdo:
,以便您需要的值在调用时具有意义。
我要做的是把它放在layoutSubviews
和一个BOOL标志,这样你只做一次。