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'。这是不正确的,将在未来的某个时候重新组织。
当您删除视图时,布局会重新计算,所有内容都会在动画开始前四处移动。
您没有提供约束的详细信息,但您似乎应该在移除视图之前为约束设置动画,然后移除并确保约束在完成时完全正常。
目前正在开发一些 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'。这是不正确的,将在未来的某个时候重新组织。
当您删除视图时,布局会重新计算,所有内容都会在动画开始前四处移动。
您没有提供约束的详细信息,但您似乎应该在移除视图之前为约束设置动画,然后移除并确保约束在完成时完全正常。