我正在尝试向UILabel
添加UITextView
并将其置于textView顶部的中心位置。它不是居中,而是放在左边。我怀疑这是因为标签的内在大小优先于约束在视图中拉伸它的尝试。不知道如何解决这个问题。这是代码:
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
self.titleLabel.textAlignment = NSTextAlignmentCenter;
self.titleLabel.text = @"Some text that should be centered in the textView";
[self addSubview:self.titleLabel];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_titleLabel);
NSArray *hConstraint =
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_titleLabel]-|"
options:0 metrics:nil
views:viewsDictionary];
[self addConstraints:hConstraint];
NSArray *vConstraint =
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(-50)-[_titleLabel]"
options:0 metrics:nil
views:viewsDictionary];
[self addConstraints:vConstraint];
这是iPad模拟器中标签左对齐的片段:
答案 0 :(得分:4)
您不能使用constraintsWithVisualFormat
来创建居中约束。您必须将视图的 center 设置为某个位置/关系,并且constraintsWithVisualFormat
字符串语法不允许您这样做。您必须使用constraintWithItem:attribute:...
(或在笔尖/故事板中设置它)。
这是将一个视图水平居中于另一个视图的代码:
NSLayoutConstraint* con =
[NSLayoutConstraint
constraintWithItem:subview attribute:NSLayoutAttributeCenterX
relatedBy:0
toItem:superview attribute:NSLayoutAttributeCenterX
multiplier:1 constant:0];
[superview addConstraint:con];
要将子视图设置为在nib中居中,请使用“编辑器”菜单在其超级视图中水平或垂直居中,然后摆脱遗留的任何多余约束(如果有的话) - nib编辑器通常非常适合获取当你把某些东西放在中心时自动摆脱这些。)
哦,对不起,还有一件事:关于约束的一个很棒的事情就是你可以约束任何其他视图。标签可能位于文本视图的 front 中,但这并不意味着必须将其约束到文本视图。如果你愿意,它可以,但我会认为它将滚动文本视图。
这应该让你开始。我的书中有很多内容:http://www.apeth.com/iOSBook/ch14.html#_autolayout