隐藏一个 UIView 并显示另一个

Posted

技术标签:

【中文标题】隐藏一个 UIView 并显示另一个【英文标题】:Hide one UIView and show another 【发布时间】:2018-09-28 16:14:34 【问题描述】:

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

还有什么更好的方法?

【问题讨论】:

isHidden 是个不错的选择。 【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

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

现在我花了那么多时间在约束手术上,感觉很愚蠢。 :|

【讨论】:

以上是关于隐藏一个 UIView 并显示另一个的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 UIView 并调整其他小部件以占用空间?

一个 UIView Swift 中的多个 TableViews - 如何同时显示

UIView在点击问题上显示和隐藏[关闭]

如何隐藏组件是反应并显示另一个组件?

iOS - 隐藏在键盘后面的 UIView 容器

显示和隐藏 UIView