我正在尝试布局一些自定义视图,当我尝试激活约束时,Xcode表示我不能使用乘数。以下是代码示例:
awk
这里的问题是Xcode在contraintEqualToAnchor:functions上给出了语法错误,并说我应该替换"乘数"到"常数"。
为什么我不能将乘数选项与X中心锚点一起使用?
答案 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):
。
我试图在代码和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