Ограничение, добавленное программно в представление xib, не работает

#ios #objective-c #storyboard #xib

#iOS #objective-c #раскадровка #xib

Вопрос:

У меня есть представление (self.printSettingsView), созданное из xib. Я добавляю это представление в качестве подвида к другому представлению (self.view). Я программно добавляю ограничения следующим образом:

 [self.printSettingView setTranslatesAutoresizingMaskIntoConstraints: NO];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:0];
[self.view addConstraint:leftConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                 attribute:NSLayoutAttributeTop
                                                                 relatedBy:NSLayoutRelationEqual
                                                                    toItem:self.topBar
                                                                 attribute:NSLayoutAttributeBottom
                                                                multiplier:1.0
                                                                  constant:0];
[self.view addConstraint:topConstraint];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeHeight
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeHeight
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:heightConstraint];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.printSettingView
                                                                   attribute:NSLayoutAttributeWidth
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeWidth
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:widthConstraint];
  

Все остальные ограничения вступают в силу, за исключением высоты.
Что я мог здесь делать не так???

Спасибо

Комментарии:

1. Не используйте внешние сайты для совместного использования кода, вставьте его здесь. Кроме того, было бы неплохо предоставить некоторый контекст с помощью скриншотов.

2. «Не работает» — это совершенно бесполезное выражение. Вам нужно сказать, что на самом деле сделал ваш код, и что вы ожидали, что он будет делать.

Ответ №1:

Не зная ограничений для вашего файла xib или того, что вы ожидаете, что произойдет в сравнении с тем, что происходит (скриншот был бы полезен), трудно сказать. Однако у меня есть одно предложение, в котором, возможно, логика неверна.

Второе ограничение заключается в закреплении printViewSettings сверху к нижней части верхней панели, эта часть имеет смысл. Однако следующее устанавливает высоту printViewSettings равной высоте его супервизора. Это может не соответствовать тому, что вы хотите, потому что ваш супервизор также содержит вашу верхнюю панель и поэтому может быть больше, чем вы ожидаете. На самом деле вам может понадобиться ограничение, которое вместо этого привязывает нижнюю часть printViewSettings к нижней части супервизора.

Ответ №2:

Извините, ребята, за неполную информацию. По сути, проблема заключалась в том, что я назначал ограничение для подвида в моем основном представлении, и какой бы константой ни было ограничение, размер подвида оставался постоянным. Я обнаружил, что проблема заключалась в том, что в подвиде, в свою очередь, были компоненты (подвиды) с фиксированными ограничениями по высоте. Я сделал их пропорциональными высоте родительского представления, и теперь это работает.