Ios IBOutlet自动布局约束常量更改

Ios IBOutlet自动布局约束常量更改,ios,swift,uiviewcontroller,autolayout,uistoryboard,Ios,Swift,Uiviewcontroller,Autolayout,Uistoryboard,我在情节提要中定义了一个自动布局约束,并将其设置为IBOutlet: @IBOutlet weak var bottomPanelbottomConstraint:NSLayoutConstraint! 故事板中的设置如下: 接下来,我更改viewDidLoad中的常量: override func viewDidLoad() { super.viewDidLoad() bottomPanelbottomConstraint.constant = -12 } 但在viewD

我在情节提要中定义了一个自动布局约束,并将其设置为IBOutlet:

@IBOutlet weak var bottomPanelbottomConstraint:NSLayoutConstraint!
故事板中的设置如下:

接下来,我更改viewDidLoad中的常量:

override func viewDidLoad() {
    super.viewDidLoad()
    bottomPanelbottomConstraint.constant = -12
}
但在viewDidLayoutSubviews中,我仍然发现它的常数是-3,这是Storyboard中的值。这怎么会发生

编辑:以下变通方法可行,但并不理想:

 override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if bottomPanelbottomConstraint.constant == -3 {
        bottomPanelbottomConstraint.constant = -12
        bottomPanel.layoutIfNeeded()
        self.view.layoutIfNeeded()
    }
 }


更改常量后,应调用
layoutifneed()
。它将立即强制更新布局。

更改常量后,应调用
layoutifneed()
。它将立即强制更新布局。

我确实在self.view上调用它,甚至在底部面板上也是如此。但是没有效果!哦。然后我认为这可能是由于约束冲突造成的,但在我添加另一个子视图后,它会变回-12,这是不相关的!主要的问题是它重置为故事板值,这很奇怪。没有约束冲突。您真的需要所有这些大小类常量吗?我确实在self.view上调用它,甚至在底部面板上也是如此。但是没有效果!哦。然后我认为这可能是由于约束冲突造成的,但在我添加另一个子视图后,它会变回-12,这是不相关的!主要的问题是它重置为故事板值,这很奇怪。没有约束冲突。确实需要所有这些大小类常量吗?可能是在加载视图但尚未布局时设置了约束。您是否尝试过在ViewDidDisplay上设置约束?另外,您也可以将
放在底部panel.setNeedsLayout()
?很遗憾,ViewDid出现得太晚了。我最多只想在ViewDidLayoutSubView中执行所有操作,原因有几个。在viewDidLayoutSubviews之后,我有一些任务可以将UI挂起0.5左右。如果我在ViewDidDisplay中这样做,问题是用户可能会看到底部面板在约束更改时向上猛拉,这并不理想。视图应该在ViewDidLayoutSubView中进行布局,对吗?或者子视图仍然可以在ViewDidLayoutSubView中挂起更新?您正在告诉系统对不同的特性使用特定的常量值。。。然后,您正试图通过代码覆盖它。决定你是想使用特征变体还是代码。我还想在故事板中看到视觉效果。在纵向模式下,我仅通过iPhone X或iPad的位偏移调整一些值。因为在故事板中没有办法调整特定设备的值,只能调整特征变量。可能是在加载视图但尚未布局视图时设置了约束。您是否尝试过在ViewDidDisplay上设置约束?另外,您也可以将
放在底部panel.setNeedsLayout()
?很遗憾,ViewDid出现得太晚了。我最多只想在ViewDidLayoutSubView中执行所有操作,原因有几个。在viewDidLayoutSubviews之后,我有一些任务可以将UI挂起0.5左右。如果我在ViewDidDisplay中这样做,问题是用户可能会看到底部面板在约束更改时向上猛拉,这并不理想。视图应该在ViewDidLayoutSubView中进行布局,对吗?或者子视图仍然可以在ViewDidLayoutSubView中挂起更新?您正在告诉系统对不同的特性使用特定的常量值。。。然后,您正试图通过代码覆盖它。决定你是想使用特征变体还是代码。我还想在故事板中看到视觉效果。在纵向模式下,我仅通过iPhone X或iPad的位偏移调整一些值。因为在故事板中没有办法调整特定设备的值,只有特性变化。