通过其约束为 UIView(包含带约束的子组件)设置动画

Posted

技术标签:

【中文标题】通过其约束为 UIView(包含带约束的子组件)设置动画【英文标题】:Animating a UIView (that contains child components WITH constraints) by its constraints 【发布时间】:2017-05-05 03:37:09 【问题描述】:

我最近试图通过它的约束为一个 UIView 动画,其中包含一个文本字段(有约束)。我成功地移动了 UIView,但无论出于何种原因,当 UIView 移动并且 X-Code 调试器抛出错误时,它内部的文本字段会被“弄脏”:[LayoutConstraints] Unable to simultaneously satisfy constraints.。我正在将 UIView 移到屏幕外,所以也许这就是原因。我的代码在这里:

        self.mainViewLeftConstraint.constant = self.menuView.frame.width
        self.mainViewRightConstraint.constant = self.mainViewRightConstraint.constant + self.menuView.frame.width


        UIView.animate(withDuration: 0.2) 

            self.view.layoutIfNeeded()
        

在上面的代码中,mainView 是屏幕的宽度,menuView 大约是一半。抱歉,如果这个问题有点难以理解,因为没有任何类型的视觉指南很难解释这个问题。

【问题讨论】:

你能分享故事板的截图吗? 确保文本字段的约束只在它和它的超级视图之间。 @vacawama 是对的.. 这意味着您的文本字段约束未使用您要设置动画的 UIView 设置 【参考方案1】:

您提到的错误[LayoutConstraints] Unable to simultaneously satisfy constraints 表示UITextfield 的所有约束都不适用于UIViewUITextfield 的超级视图)。因此,当您移动UIView 时,同时满足UITextfield 的所有约束(w.r.t UIView + w.r.t 一些其他视图)存在歧义。

【讨论】:

我重新设置了约束并确保它们都在 UIView 中,但我仍然遇到同样的错误。我读到这可能是由于我在 UIView 的两侧有两个约束,我正在移动到 ViewController 的边缘。不知道如何解决这个问题。

以上是关于通过其约束为 UIView(包含带约束的子组件)设置动画的主要内容,如果未能解决你的问题,请参考以下文章

UIView 内部约束

Swift:动画后将 UIView 的帧重置为其约束

通过更新约束滑入 UIView

通过动画调整 UIView 大小时约束不起作用

空 UIView 上的自动布局约束无法按预期工作

使用 IOS 中的约束将 UIView 中的子视图居中