让我来描述一下这里的情况。我有两个水平堆栈和一个垂直堆栈。第一个水平堆栈包含两个圆形UIView
s,第二个水平堆栈包含一个圆形UIView
。我在垂直堆栈中添加了两个水平堆栈,当我运行程序时工作正常,请see the image(纵向模式)以获得清晰的概念。
在横向模式中,我稍微改变了一下,我将第一个水平堆栈的widthAnchor
设置为0.67的百分位数,将第二个水平堆栈的widthAnchor
设置为百分位数根据显示视图为0.33,并将垂直堆栈轴改为水平。我的想法是,当我将其转换为横向模式时,所有堆栈将适合显示视图并排成一行。它工作正常,请see the image(横向模式)来获得清晰的概念。
但问题是当我再次回到纵向模式时。似乎他们仍然坚持以前的宽度限制。某物 like this
虽然我已经更改了 widthAnchors ,但它们无法正常工作。我在这做错了什么?这是我的代码:
var firstCircleStack = circleFirstHorizontalStack.widthAnchor.constraint(equalTo: displayView.widthAnchor)
var secondCircleStack = circleSecondHorizontalStack.widthAnchor.constraint(equalTo: displayView.widthAnchor)
if UIScreen.main.bounds.height < UIScreen.main.bounds.width {
// landscape mode
circleVerticalStack.axis = .horizontal
firstCircleStack = firstCircleStack.setMultiplier(multiplier: 0.67)
secondCircleStack = secondCircleStack.setMultiplier(multiplier: 0.33)
}
else {
// portrait mode
circleVerticalStack.axis = .vertical
firstCircleStack = firstCircleStack.setMultiplier(multiplier: 1)
secondCircleStack = secondCircleStack.setMultiplier(multiplier: 1)
}
设置我使用的乘数值:
extension NSLayoutConstraint {
func setMultiplier(multiplier:CGFloat) -> NSLayoutConstraint {
let newConstraint = NSLayoutConstraint(
item: firstItem,
attribute: firstAttribute,
relatedBy: relation,
toItem: secondItem,
attribute: secondAttribute,
multiplier: multiplier,
constant: constant)
newConstraint.priority = priority
newConstraint.shouldBeArchived = self.shouldBeArchived
newConstraint.identifier = self.identifier
newConstraint.isActive = true
print("new constraint multiplier \(newConstraint.multiplier)")
NSLayoutConstraint.deactivate([self])
NSLayoutConstraint.activate([newConstraint])
return newConstraint
}