2

我在这里有一个简单(完整)的例子,看起来很奇怪,但我肯定只是错过了一些小东西......对吧?你能帮助调试下面的简单代码吗?这段代码使 aView 消失了,但是如果我将 aLabel 放在 aView 所在的约束中,它就完美了。为什么?感谢您的任何意见,这对我来说似乎很疯狂。

奥斯汀

UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 30)];
aView.backgroundColor = [UIColor redColor];
aView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:aView];

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 100, 30)];
aLabel.backgroundColor = [UIColor redColor];
aLabel.text = @"Label";
aLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:aLabel];

NSLayoutConstraint *myConstraint =[NSLayoutConstraint
                                   constraintWithItem:aView
                                   attribute:NSLayoutAttributeCenterY
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:self.view
                                   attribute:NSLayoutAttributeCenterY
                                   multiplier:1.0
                                   constant:0];

[self.view addConstraint:myConstraint];

myConstraint =[NSLayoutConstraint
               constraintWithItem:aView
               attribute:NSLayoutAttributeCenterX
               relatedBy:NSLayoutRelationEqual
               toItem:self.view
               attribute:NSLayoutAttributeCenterX
               multiplier:1.0
               constant:0];

[self.view addConstraint:myConstraint];
4

3 回答 3

5

好吧,这条线 aView.translatesAutoresizingMaskIntoConstraints = NO; 使视图的大小为零。所以你必须添加这些代码行:

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:aView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100];
[aView addConstraint:widthConstraint];


NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:aView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:30];
[aView addConstraint:heightConstraint];
于 2013-08-07T05:26:17.237 回答
4

答案很简单。某些对象,如 UILabels 具有基于其包含的文本的固有大小,而 UIViews 则没有。因此,由于您没有为 UIView 设置大小,因此它的大小为 0。您需要添加大小约束,或将视图固定到其父视图(或同一视图层次结构中的其他视图)的两侧。

于 2013-08-07T05:07:31.087 回答
0

作为替代方案,设置所有 4 个约束(左、右、上、下)也可以解决问题。然后调整宽度和高度,并相应地拉伸 UIView。请注意,必须设置所有四个约束。

于 2016-08-25T11:59:19.953 回答