我有一个带有标签的Scrollview。要将标签置于顶部中心,我对其应用两个约束:
[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]];
如果没有将questionLabel的translatesAutoresizingMaskIntoConstraints设置为NO,我将遇到Core Layout抛出的异常。它警告我它无法满足以下约束:
(
"<NSLayoutConstraint:0x8e3baf0 V:|-(30)-[UILabel:0xa184ca0] (Names: '|':WLQuestionnaireSingleQuestionView:0xa184050 )>",
"<NSAutoresizingMaskLayoutConstraint:0x8e3efa0 h=--& v=--& UILabel:0xa184ca0.midY == + 15>"
)
在那里,我看到Core Layout试图满足一个自动生成的约束,该约束与自动调整掩码向后兼容。根据我的理解,对此的修复应该是将translatesAutoresizingMaskIntoConstraints设置为NO,但不幸的是,这会导致完全黑屏,没有调试消息。
我以编程方式实现了视图,没有nib。
答案 0 :(得分:0)
嗯,我看到这个问题已经很老了。但是我想给出一个答案,因为它可能仍然对其他人感兴趣。当您使用带有AutoLayout的UIScrollView
时,内容大小由约束决定。由于视图中没有约束到底部,因此无法正确设置高度。宽度与您未为视图指定任何宽度相同。您刚刚告诉AutoLayout它应该位于视图的中心。您可以使用以下代码解决问题(view width = 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]];