我遇到了AutoLayout的问题,这让我很头疼。我有一个scrollview&使用Autolayout在.xib中设置容器视图。我需要动态地将子视图添加到容器视图中,并尝试让它们与Auto Layout一起玩得很好。这不太顺利......
这是我想要完成的图片:
所以滚动视图和容器图层已经在xib中设置了自动布局和视图1-3我试图以编程方式添加。我的第一个方法是:
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[viewOne]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(viewOne)]]
导致:
无法同时满足约束条件。 可能至少下列列表中的一个约束是您不想要的约束。试试这个:(1)看看每个约束并试着找出你不期望的东西; (2)找到添加了不需要的约束或约束的代码并修复它。 (注意:如果你看到你不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints)
( "<NSLayoutConstraint:0x9d84de0 H:|-(20)-[UIView:0x9d922e0] (Names: '|':UIView:0x9d91fb0 )>", "<NSAutoresizingMaskLayoutConstraint:0x9d9fe90 h=--& v=--& UIView:0x9d922e0.midX ==>" )
我也尝试过使用constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant
,但我正在努力让它以我想要的方式运作。我做了一些根本错误的事情吗?
斯蒂芬
答案 0 :(得分:2)
另一个可能的原因:使用乘数0而不是1 ...
答案 1 :(得分:1)
答案 2 :(得分:0)
我有完全相同的问题(非常令人沮丧,但调试器提供了一个很好的提示。)在我的情况下,我在将子视图添加到超级视图之前创建了一个超级视图约束。看起来这应该可行,因为没有实际的超级视图对象传递给约束构建器函数。这是之前和之后(我很快,希望你可以遵循):
破碎版:
let v0 = UILabel(frame: CGRect(x: 100, y: 50, width: 200, height: 20))
v0.text = "Hello"
let v1 = UILabel(frame: CGRect(x: 100, y: 100, width: 200, height: 20))
v1.text = "World"
let c0 : AnyObject[]! = NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-20-[top]-10-[bottom]",
options: NSLayoutFormatOptions.fromMask(0),
metrics: nil,
views: ["top":v0, "bottom":v1])
mainView.autoresizesSubviews = true
for v in [v0, v1, mainView]
{
mainView.setTranslatesAutoresizingMaskIntoConstraints(false)
}
for v in [v0, v1]
{
mainView.addSubview(v)
}
mainView.addConstraints(c0)
修正版:
let v0 = UILabel(frame: CGRect(x: 100, y: 50, width: 200, height: 20))
v0.text = "Hello"
let v1 = UILabel(frame: CGRect(x: 100, y: 100, width: 200, height: 20))
v1.text = "World"
mainView.autoresizesSubviews = true
for v in [v0, v1, mainView]
{
mainView.setTranslatesAutoresizingMaskIntoConstraints(false)
}
for v in [v0, v1]
{
mainView.addSubview(v)
}
let c0 : AnyObject[]! = NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-20-[top]-10-[bottom]",
options: NSLayoutFormatOptions.fromMask(0),
metrics: nil,
views: ["top":v0, "bottom":v1])
mainView.addConstraints(c0)