Размер второго вида игнорируется при ограничении двух видов для заполнения экрана визуальным форматом

Я пытаюсь установить ограничение, при котором ширина двух представлений должна заполнять экран. Если я изменю ширину одного вида, другой вид должен измениться соответственно:

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1]-8-[view2]-8-|" options:0 metrics:nil views:views]];

Я думаю, что это довольно просто, но код, кажется, игнорирует размер view2, view1 продолжает получать всю ширину экрана и настройки кадра view2 не влияет на ширину view1,

Что мне не хватает?

1 ответ

Решение

Назначить ограничение минимального размера view2 также, или "0 width" будет правильным решением для ограничений.

[NSLayoutConstraint activateConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[view1(>=minSize)]-8-[view2(>=minSize)]-8-|" 
                                            options:0 
                                            metrics:@{@"minSize" : @50} 
                                              views:views]];

Кроме того, не используйте addConstraints: больше (iOS 8+). использование -[NSLayoutConstraint setActive:] или же +[NSLayoutConstraint activateConstraints:]

Что касается изменения view2по размеру, вы не можете установить рамки просмотра непосредственно, когда вы используете Auto Layout. Значение будет перезаписано при следующем проходе макета. Вы должны создать явное ограничение ширины для вида:

[NSLayoutConstraint constraintWithItem:view2
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                                toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                            multiplier:1.0
                              constant:120];

а затем отрегулируйте константу этого ограничения, когда вам нужно изменить размер представления.

Другие вопросы по тегам