NSLayoutConstraint 的问题
Posted
技术标签:
【中文标题】NSLayoutConstraint 的问题【英文标题】:Problems with NSLayoutConstraint 【发布时间】:2013-11-12 07:24:31 【问题描述】:我想在我的主窗口顶部显示一个简单的标签栏。 这是我使用的代码:
UIView* tabBar = [[UIView alloc] init];
tabBar.backgroundColor = [UIColor redColor];
tabBar.translatesAutoresizingMaskIntoConstraints = false;
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:tabBar
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeWidth
multiplier:0
constant:0]];
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:tabBar
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:0]];
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:tabBar
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:40]];
但是标签栏无法显示。我在这里做错了什么?
【问题讨论】:
【参考方案1】:至少在这段代码中,您还没有将标签栏添加到视图中。您还没有指定水平 位置(您有宽度,但没有位置,因此视图将位于屏幕边缘的一半)。
视觉格式语言将使设置更容易:水平为@"|[tabBar]|"
,垂直为@"V:|[tabBar(==40)]"
。对于 VFL 无法处理的事情,您只需要使用冗长的单独约束方法即可。
【讨论】:
【参考方案2】:我发现了三个错误:
1.在添加任何约束之前,您需要在视图层次结构中添加视图。
tabBar.translatesAutoresizingMaskIntoConstraints = false;
[self.view addSubview:tabBar];
2.First 约束乘数 == 0 它告诉 tabBar.width == 0 个点;
3.last 约束想要的样子。
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:tabBar
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0f
constant:40]];
或者只是按照@jrturton 的建议使用 constraintsWithVisualFormat 方法。
【讨论】:
以上是关于NSLayoutConstraint 的问题的主要内容,如果未能解决你的问题,请参考以下文章