2017-02-03 4 views
1

Я пытаюсь добавить подпрос в представление с ограничениями через. код. У меня был некоторый успех, но конечное ограничение, по-видимому, полностью игнорируется по любой причине.Трейлинг-ограничение не применяется при программном добавлении UIConstraints

Мой код:

leading_const = 16.f; 
trailing_const = 16.f; 
top_const = 12.f; 
bottom_const = 12.f; 


insertView.translatesAutoresizingMaskIntoConstraints = NO; 
[view addSubview:insertView]; 
NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:insertView 
                  attribute:NSLayoutAttributeLeading 
                  relatedBy:NSLayoutRelationEqual 
                   toItem:view 
                  attribute:NSLayoutAttributeLeading 
                  multiplier:1.f 
                  constant:leading_const]; 
NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:insertView 
                  attribute:NSLayoutAttributeTrailing 
                  relatedBy:NSLayoutRelationEqual 
                   toItem:view 
                  attribute:NSLayoutAttributeTrailing 
                  multiplier:1.f 
                  constant:trailing_const]; 
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:insertView 
                 attribute:NSLayoutAttributeTop 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:view 
                 attribute:NSLayoutAttributeTop 
                 multiplier:1.f 
                 constant:top_const]; 
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:insertView 
                    attribute:NSLayoutAttributeHeight 
                    relatedBy:NSLayoutRelationEqual 
                     toItem:nil 
                    attribute:NSLayoutAttributeHeight 
                    multiplier:1.f 
                    constant:130.f]; 
[superView addConstraints:@[leading, trailing, top, height]]; 

Результат:

enter image description here

Цените никаких указаний!

+0

В какую функцию вы добавляете ограничения? – Paulw11

+0

Вы не должны добавить ограничение для просмотра? – Joshua

+0

Вы можете вызвать NSLayoutConstraint.activate (@ [ведущий, трейлинг, верх, высота]) –

ответ

2

Ваше ограничение применяется, но поскольку у вас установлено значение 16, он идет на 16 пунктов мимо задней кромки view. Поэтому вы должны использовать отрицательное значение для константы.

+0

Это решило! Интересно, почему это отрицательное значение в коде, но это было бы положительным значением в построителе интерфейса? – Kevin

+0

Это зависит от того, как вы связываете представления с ограничением. В вашем случае вы привязывали задний край 'insertView' к задней кромке' view', поэтому вам нужно вернуть 16 точек назад с края 'view'. Если вам нужно было связать ваше мнение по-другому, 'view' ->' insertView', вы должны использовать положительное число, чтобы переместить его на 16 пунктов вперед от заднего края 'insertView'. Я надеюсь, что в этом есть смысл. – Hodson

+0

Спасибо за объяснение! Делает полный смысл. – Kevin

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