Swift: removefromSuperview 移除约束

Swift: removefromSuperview removes constraints

目前正在开发一些 swift 程序,我有一个号召性用语,我从超级视图中删除了一个模糊视图,同时我正在为 2 个按钮设置动画。

一切正常,但有一个小问题。当我从我的超级视图中删除模糊视图时,我的 2 个按钮上的约束在底部被设置为 0 并从该位置开始动画。

我不希望它们变为 0。如果我不删除模糊视图,我的动画效果会很好。我检查了我的按钮约束是否与 blurview 相关,但事实并非如此。因为我假设它只能在它们相对于 blurview 时重置我的约束。

我的故事板如下所示:

view
  |->  camera_view
  |->  blur_view
  |->  record_label
  |->  record_button

我正在执行的代码如下:

@IBAction func recordButton(sender: AnyObject) {
    self.blurView?.removeFromSuperview()
    UIButton.animateWithDuration(0.3, delay: 0.2, options: .CurveEaseOut, animations: {
        var recordButtonFrame = self.recordButton.frame
        var recordLabelFrame = self.recordLabel.frame

        recordButtonFrame.origin.y -= recordButtonFrame.size.height
        recordLabelFrame.origin.y -= recordLabelFrame.size.height

        self.recordButton.frame = recordButtonFrame
        self.recordLabel.frame = recordLabelFrame
        }, completion: { finished in
            print("Button moved")
    })
}

我做错了什么?

亲切的问候,

沃特

您可以隐藏它,而不是从 superview 中删除 blurView

替换

self.blurView?.removeFromSuperview()

self.blurView?.hidden = true

问题是您在使用约束的同时为帧设置动画。您应该为约束变化/约束常量值变化设置动画。

当您不删除视图时,不会重新计算布局,因此您的帧动画 'works'。这是不正确的,将在未来的某个时候重新组织。

当您删除视图时,布局会重新计算,所有内容都会在动画开始前四处移动。

您没有提供约束的详细信息,但您似乎应该在移除视图之前为约束设置动画,然后移除并确保约束在完成时完全正常。