2016-08-26 6 views
0

次のコードを使用して、UIViewをサブクラス化し、いくつかの罫線を追加します。問題は、自動レイアウト制約を考慮していないことです。 autolayoutが考慮されるようにしたいと思いますし、UIViewに境界が描画されるようにします。どんな助けでも大変感謝しています。initWithCoderはアカウントに自動レイアウトしない

- (instancetype)initWithCoder:(NSCoder *)coder 
{ 
self = [super initWithCoder:coder]; 
if (self) { 
    [self setupView]; 
} 
return self; 
} 

- (void)setupView { 

[self prefix_addUpperBorder:UIRectEdgeTop color:[UIColor flatWhiteColorDark] thickness:0.5]; 

} 

- (CALayer *)prefix_addUpperBorder:(UIRectEdge)edge color:(UIColor *)color thickness:(CGFloat)thickness 
{ 
CALayer *border = [CALayer layer]; 

switch (edge) { 
    case UIRectEdgeTop: 
     border.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), thickness); 
     break; 
    case UIRectEdgeBottom: 
     border.frame = CGRectMake(0, CGRectGetHeight(self.frame) - thickness, CGRectGetWidth(self.frame), thickness); 
     break; 
    case UIRectEdgeLeft: 
     border.frame = CGRectMake(0, 0, thickness, CGRectGetHeight(self.frame)); 
     break; 
    case UIRectEdgeRight: 
     border.frame = CGRectMake(CGRectGetWidth(self.frame) - thickness, 0, thickness, CGRectGetHeight(self.frame)); 
     break; 
    default: 
     break; 
} 

border.backgroundColor = color.CGColor; 

[self.layer addSublayer:border]; 

return border; 
} 

答えて

1

ビューオブジェクトのinitメソッドは、ビューがビュー階層にインストールされる前に起動します。それはビューのレイアウトで数学を行う場所ではありません。

ビューのlayoutSubviewsメソッドをオーバーライドすると、そこにコードを配置してビューを更新できます。 initのレイヤのサブレイヤを追加して、後で見つかるようにプロパティに保存する必要があります。layoutSubviewsでは、[super layoutSubviews]を呼び出し、必要に応じてカスタムレイヤーを調整します。

+0

完全なおかげで、通常はサブクラス化しないでください。 – ORStudios

関連する問題