使用CALayer和自动布局的UIView自定义边框



我必须为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标志,这样你只做一次。

最新更新