Ios 隐藏视图时,自动布局中的Swift约束不会更改
这是我的密码 //我的看法Ios 隐藏视图时,自动布局中的Swift约束不会更改,ios,swift,Ios,Swift,这是我的密码 //我的看法 @IBOutlet weak var UIVIewFirst: UIView! @IBOutlet weak var UIViewSecond: UIView! @IBOutlet weak var UIViewThird: UIView! @IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint! @IBOutlet weak var ViewThirdHeight: NSLayoutCon
@IBOutlet weak var UIVIewFirst: UIView!
@IBOutlet weak var UIViewSecond: UIView!
@IBOutlet weak var UIViewThird: UIView!
@IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var ViewThirdHeight: NSLayoutConstraint!
有一个按钮,显示和隐藏视图为
@IBAction func infoClicked(sender: SSRadioButton) {
if UIViewSecond.hidden {
sender.selected = false
UIViewSecond.hidden = false
self.middleViewHeightConstraint.constant = 134
} else {
sender.selected = true
UIViewSecond.hidden = true
self.middleViewHeightConstraint.constant = 0
self.ViewThirdHeight.constant = 180
}
}
每个视图之间的垂直间隙为10。隐藏视图后,间隙变为20。但我需要将它设置为第三视图和第二视图之间的10。即使我将“第三视图高度”常量设置为任何数字,它也不会改变其位置。有人能告诉我为什么会发生这种情况吗???您没有告诉视图使用新约束更新视图,您必须调用以下代码:
self.view.layoutifneed()
删除secondView后
firstView
| gap = 10
---------- height = 0
| gap = 10
thirdView
所以差距变成了20
尝试在隐藏视图后以编程方式添加约束或减少任何一个间隙。约束忽略
隐藏属性
如果可能满足您的需求,请将视图嵌入到UIStackView
中
请参见。尝试更改视图的框架,而不是更改约束,也可以在进行任何更改后执行view.Layout所需操作。您需要在第一个第二个
或第二个第三个
视图之间使用垂直间距
约束的出口连接。另外,如果只想隐藏/显示第二视图,则无需对第三视图高度约束进行任何更改
例如,我们取第一视图和第二视图之间的垂直间距的出口,然后:
@IBOutlet weak var UIVIewFirst: UIView!
@IBOutlet weak var UIViewSecond: UIView!
@IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var verticalSpacingConstraint: NSLayoutConstraint!
@IBAction func infoClicked(sender: UIButton)
{
if UIViewSecond.hidden
{
sender.selected = false
UIViewSecond.hidden = false
self.middleViewHeightConstraint.constant = 134
self.verticalSpacingConstraint.constant = 10
}
else
{
sender.selected = true
UIViewSecond.hidden = true
self.middleViewHeightConstraint.constant = 0
self.verticalSpacingConstraint.constant = 0
}
}
以下是输出的屏幕截图:
1。未选择按钮时
2。选择按钮时
我应该在哪里添加此项?请详细说明..这是否支持自动布局?在上面的代码之后,更改约束后,您必须调用此项,是的,这会告诉您的自动布局使用新的约束重新进行布局T应该工作,如果没有,那么您的约束是错误的,或者它没有改变任何东西。我在self.middleViewHeightConstraint.constant=0之后添加了它。它不会改变任何东西。它可能与视图中的子视图类型有关。昨晚我通过艰苦的学习了解到,UISlider即使隐藏起来,也有其固有的宽度。我唯一的解决方案(到目前为止)是“接受它”。在修改约束结束时使用view.setNeedsLayout()
是的,我知道差距是如何变为20的。但是我已经给出了第三个视图的约束,它不起作用。请尝试在修改约束的末尾使用setNeedsLayout()
如果您使用的是AutoLayout,更改视图的框架没有影响。它对我有效,这就是我建议尝试此操作的原因,因为有时我会遇到这样的情况:当我尝试更改约束时,除了更改框架之外,什么都不做。
@IBOutlet weak var UIVIewFirst: UIView!
@IBOutlet weak var UIViewSecond: UIView!
@IBOutlet weak var middleViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var verticalSpacingConstraint: NSLayoutConstraint!
@IBAction func infoClicked(sender: UIButton)
{
if UIViewSecond.hidden
{
sender.selected = false
UIViewSecond.hidden = false
self.middleViewHeightConstraint.constant = 134
self.verticalSpacingConstraint.constant = 10
}
else
{
sender.selected = true
UIViewSecond.hidden = true
self.middleViewHeightConstraint.constant = 0
self.verticalSpacingConstraint.constant = 0
}
}