UIView约束是否隐式重新激活?

时间:2016-03-20 02:22:45

标签: ios iphone autolayout nslayoutconstraint

我有一个视图,根据输入隐藏/显示相机按钮或发送按钮。最初它看起来像这样:

enter image description here

如果用户开始输入,则会将alpha设置为0,淡出相机,禁用相机文本框之间的约束,启用 textBox 发送按钮之间的约束,淡入以下内容:

enter image description here

为了使这项工作,我设计了故事板中的所有约束并有选择地激活它们。这几乎有效,但有一些问题。

  1. 故事板中存在所有约束,生成构建警告。有没有办法摆脱这个警告? IE,要指定但禁用一些约束?
  2. 即使我在 viewDidLoad 中禁用发送按钮的约束,只要我在 self.view.layoutIfNeeded()中调用该方法,它们的所有约束都被重新启用,导致控制台上出现过度约束的错误消息。
  3. 当我输入时,相机发送按钮会正确淡入和淡出,并且约束会使 textBox 从左侧变为动画正确又回来了。但是,当我旋转设备时,所有约束都会自动重新启用,即使我覆盖 willTransitionToTraitCollection 并在此方法退出时验证它们是否正确。我该如何阻止这种情况?
  4. 非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

还没有答案,但我需要一个解决方法,找到一个效果很好的方法。

我没有激活/停用约束,而是发现我可以像这样一次自动布局所有元素:

enter image description here

相机按钮右边约束和alpha以及发送按钮左边约束和alpha设置动画。我命令元素以便最后绘制文本字段,并且可以使用适当的约束设置覆盖,以隐藏它:

enter image description here

viewDidLoad 中,我捕获了相机的界面生成器右侧约束,以及发送按钮的左侧约束。为了使发送按钮消失,我将其alpha从1设置为0,并将其左约束设置为 -sendButton.frame.width 。若要设置发送按钮的动画并且相机按钮消失,我会执行相反的操作 - 将发送 alpha从0设置为1并为其设置动画恢复其原始左边约束,同时将相机的右边约束设置为 -cameraButton.frame.width ,并将其相应的alpha从1设置为0。

这似乎运作良好。也就是说,我仍然想知道是否有办法通过激活和停用约束来解决这个问题。