2013-06-14 2 views
6

У меня есть Scrollview с меткой. Для центрирования этикетки в верхней части, я применяю два ограничения на него:Черный экран после настройки translatesAutoresizingMaskIntoConstraints до NO

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[questionLabel]" 
                  options:0 
                  metrics:0 
                   views:viewsDictionary]]; 
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.questionLabel 
               attribute:NSLayoutAttributeCenterX 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:.0]]; 

Без установки translatesAutoresizingMaskIntoConstraints для questionLabel к NO, я побегу в исключение, брошенное ядро ​​Layout. Он предупреждает меня, что она не может удовлетворять следующее ограничение:

(
"<NSLayoutConstraint:0x8e3baf0 V:|-(30)-[UILabel:0xa184ca0] (Names: '|':WLQuestionnaireSingleQuestionView:0xa184050)>", 
"<NSAutoresizingMaskLayoutConstraint:0x8e3efa0 h=--& v=--& UILabel:0xa184ca0.midY == + 15>" 

)

В там я вижу, что основной макет пытался удовлетворить ограничение, которое автоматически генерируется для обратной совместимости с маской автоматического изменения. По моему мнению, исправление для этого должно заключаться в том, чтобы установить translatesAutoresizingMaskIntoConstraints в NO, но, к сожалению, это приводит к полностью черному экрану, отладочным сообщениям.

Я реализовал представление программно, никаких наконечников.

+1

Я борюсь с тем же типом поведения. вы нашли обходное решение? – topwik

+0

У меня такая же проблема. – clearwater82

+0

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

ответ

0

Хорошо, я вижу, что этот вопрос уже довольно старый. Однако я хочу дать ответ на этот вопрос, поскольку он может быть интересен другим. Когда вы используете UIScrollView с AutoLayout, размер содержимого определяется ограничениями. Поскольку у вас нет ограничения от вашего представления до низа, высота не может быть установлена ​​правильно. То же самое для ширины, поскольку вы не указали ширину для своего вида. Вы просто сказали AutoLayout, что он должен располагаться в центре обзора. Ваша проблема может быть решена с использованием следующего кода (ширина представления = 40):

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(30)-[questionLabel]|" 
                 options:0 
                 metrics:0 
                  views:viewsDictionary]]; 
[self addConstraint:[NSLayoutConstraint constraintWithItem:self.questionLabel 
               attribute:NSLayoutAttributeCenterX 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:.0]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[questionLabel(40)]", options: 0, metrics: 0, views: viewsDictionary]]; 
Смежные вопросы