Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 隐藏视图时,自动布局中的Swift约束不会更改_Ios_Swift - Fatal编程技术网

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
    }
}