隐藏一个 UIView 并显示另一个



当我点击我的UISegmentedControl的一段时,我希望显示两个UIViews之一。但是我该如何安排它,我只显示新视图。目前,我正在旧的上调用thisview.removeFromSuperview(),然后从头开始设置新的全部。我还尝试将视图子视图的所有高度常数设置为零,然后将视图本身的高度常数设置为零,但我宁愿避免这种约束手术。

还有什么更好的方法?

同意@rmaddy关于使用 UIView 的隐藏属性的观点,这是一种很好的简单方法,可以使视图不被绘制,但仍在视图层次结构和约束系统中占据其位置。

您可以实现一个简单的动画,使其不那么刺耳,如下所示:

UIView.animate(withDuration:0.4, animations: {
myView.alpha = 0
}) { (result: Bool) in
myView.isHidden = true
}

这将淡化视图"myView"上的 alpha,然后在完成后将其设置为隐藏。

如果您有视图需要重新排列,也可以使用相同的动画概念,动画布局更改将是一个不错的选择。

基于@rmaddy和@CSmiths答案,我构建了以下函数:

func changeView(newView: UIView, oldView: UIView) {
newView.isHidden = false
newView.alpha = 0
UIView.animate(withDuration:0.4, animations: {
oldView.alpha = 0
newView.alpha = 1
}) { (result: Bool) in
oldView.isHidden = true
}
}

我现在为我花在约束手术上的所有时间感到愚蠢。

最新更新