首页 > 解决方案 > 在视图层次结构中全局更改 UIView 显示顺序

问题描述

考虑以下视图层次结构:

let bottomView = UIView()
addSubview(bottomView)

let bottomViewSubview = UIView()
bottomView.addSubview(bottomViewSubview)

let topView = UIView()
addSubview(topView)

// bottomViewSubview.displayOnTopOfTopView() - How?

我想知道 UIKit 中是否有可能在不更改视图/子视图层次结构的情况下始终在所有其他视图之上显示某个视图的子视图,包括覆盖其父视图的视图。据我所知,CALayer.zIndex 只在 UIView 的子层中工作,而不是在我需要的全局范围内工作。而且我无法更改层次结构,因为我想在其他所有事情(例如子视图转换)中都依赖它。

我想唯一的选择是创建新视图,它实际上位于视图层次结构的顶部,并手动同步所有转换以使其看起来像是某人的子视图?

标签: iosswiftuiviewuikitcore-animation

解决方案


您可以删除视图并使用该insert(_: at:)功能移动视图。或者,bringSubviewToFront(UIView)可以sendSubviewToBack(UIView)使用。如果您没有对需要移动的视图的引用,则可以使用该subviews属性来查找它。

bringSubviewToFront(bottomViewSubview)

推荐阅读