隐藏一个UIView并显示另一个

时间:2018-09-28 16:14:35

标签: ios swift uiview autolayout

当我单击UISegmentedControl的一部分时,我希望显示两个UIViews中的一个。但是,我该如何安排呢?我只显示新视图。目前,我正在旧版本上呼叫thisview.removeFromSuperview(),然后从头开始设置新版本。我还尝试将视图子视图的所有HeightConstants设置为零,然后将视图本身的heightConstants设置为零,但我宁愿避免这种约束手术。.

有哪些更好的方法?

2 个答案:

答案 0 :(得分:1)

与@rmaddy同意使用UIView的hidden属性,这是一种导致视图无法绘制但仍在视图层次结构和约束系统中占据位置的好方法。

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

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

这将使视图“ myView”上的Alpha褪色,然后将其设置为隐藏。

如果视图需要重新布置自己,则也可以使用相同的动画概念,对布局更改进行动画处理将是不错的选择。

答案 1 :(得分:1)

基于@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
    }
}

现在我花在那个约束手术上的所有时间都很愚蠢。 :|