iOS约束不允许使用乘数

时间:2016-08-05 12:00:32

标签: ios swift nslayoutconstraint ios-autolayout

我正在尝试布局一些自定义视图,当我尝试激活约束时,Xcode表示我不能使用乘数。以下是代码示例:

awk

这里的问题是Xcode在contraintEqualToAnchor:functions上给出了语法错误,并说我应该替换"乘数"到"常数"。

为什么我不能将乘数选项与X中心锚点一起使用?

4 个答案:

答案 0 :(得分:9)

您无法使用辅助函数设置乘数,但您可以使用NSLayoutConstraint初始化程序设置乘数。我自己也陷入困境,但找到了答案。

您的代码:addButton.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, multiplier: 0.5)

正确代码:NSLayoutConstraint(item: addButton, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 0.5, constant: 0)

此外,请勿忘记通过键入isActive = true

来激活此约束

答案 1 :(得分:1)

你不能在NSLayoutXAxisAnchor锚点上使用乘数 - 乘以一条线的位置在约束系统可以理解的方式下没有意义。您只能使用带NSLayoutDimension个锚点的乘数,它会测量 length ,就像宽度一样。

使用堆栈视图可以更好地实现您尝试进行的布局。

答案 2 :(得分:1)

似乎在IB中你可以使用带有中心X的乘数选项并获得你想要的效果(将button1的中心设置为它所在视图宽度的1/4,以及按钮2的中心位于它所在视图宽度的2/3):
                    setting the center of a button at 1/4 the width of the view it's in, using the Interface Buildersetting the center of a button at 2/3 the width of the view it's in, in StoryBoard

我试图在代码和IB中使用它,在代码中我得到了和你一样的错误。 令人惊讶的是,在IB中它工作,没有错误,没有警告。 (我正在使用Xcode 7,将在Xcode 8中尝试它以查看它是否仍然有效。)

答案 3 :(得分:1)

以前的答案现在很奇怪。

您可以简单地用视图创建宽度/高度乘数的UILayoutGuid并将guid.trailing设置为等于子视图的centerX。

例如,如果需要将addButton放置在视图的前1/3中,将settingsButton放置在视图2/​​3中,则只需设置两个布局指南即可。

let addButtonGuid = UILayoutGuide()
self.addLayoutGuide(guid)
addButtonGuid.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1/3).isActive = true
addButtonGuid.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
addButton.centerXAnchor.constraint(equalTo: addButtonGuid.trailingAnchor).isActive = true
// same for settingsButton

但是最好的方法是使用UIStackView并将其distribution属性设置为equalCentering