2016-08-26 2 views
0

Im, используя следующий код для подкласса UIView и добавления к нему некоторых границ. Проблема заключается в том, что он не учитывает ограничения автоопределения. Я бы хотел, чтобы автозапуск был учтен, а затем UIView имеет нарисованную на нем границу. Любая помощь будет большой благодарностью.initWithCoder, не входящий в аккаунт Autolayout

- (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

Методы инициализации объекта вашего вида стреляют до того, как представление установлено в иерархии представлений. Это не место для математики на макете представления.

Если вы переопределяете метод вида layoutSubviews, вы можете поместить там код, который обновит ваш вид. Обратите внимание, что вы должны добавить подуровень вашего слоя в init (и сохранить его в свойстве, чтобы вы могли его найти позже). Затем в layoutSubviews вы должны позвонить [super layoutSubviews], а затем настроить свой пользовательский слой по мере необходимости.

+0

Отличное спасибо, обычно не подкласс. – ORStudios

Смежные вопросы