UIView的自定义边框使用CALayer和autolayout

时间:2013-04-24 21:10:51

标签: uiview calayer autolayout

我必须为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用于自动布局限制吗?
  • 还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

iOS中没有CALayer自动调整或约束。 (在Mac OS X上有,但在iOS中没有。)

这里的要求不合理。你说你拒绝将呼叫转移到BordeIzquierdo:。但是,在您知道clDerecho(因此self)的大小之前,无法self.layer正确的大小。 Cocoa touch编程的一半技巧就是将代码放在正确的位置。您必须找到将呼叫置于BordeIzquierdo:的正确位置,以便您所需的值在被调用时具有意义。

我会做的是将它放在layoutSubviews和BOOL标志中,这样你只需要做一次。