3

我必须为 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 之前。(0,0;0,0) 也是如此UIView.layer.frame,因此添加的子层未显示,因为它的宽度/高度=0.0f

现在如何在不将此自定义绘图转移到另一个方法之后执行此代码,viewDidLoad例如didLayoutSubviews.

我希望在viewDidLoad调用之前正确应用此样式。

  • 有什么像我可以使用的自动布局约束CALayers吗?
  • 还有其他想法吗?
4

1 回答 1

5

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

你这里的要求是不合理的。您说您拒绝将呼叫移至BordeIzquierdo:。但是在您知道(因此)的大小之前,您无法给出正确的大小。Cocoa 触控编程的一半艺术在于将您的代码放在正确的位置。您必须找到正确的位置来进行调用,以便您需要的值在调用时具有意义。clDerechoselfself.layerBordeIzquierdo:

我要做的就是把它layoutSubviews和一个 BOOL 标志放在一起,这样你就只做一次。

于 2013-04-24T22:04:07.003 回答