Swift iOS如何让Container View置于父视图内容的背景层
Container View 置于父视图内容底层实现方案
UIKit 视图渲染遵循「子视图数组顺序从下到上堆叠」的规则,Storyboard 中新增的 Container View 会默认被插入到父视图 subviews 数组的末尾,因此会覆盖所有提前添加的父视图内容,两种方式可快速调整层级:
纯Storyboard零代码调整
- 打开对应父视图控制器的Storyboard文件,调出左侧的视图层级 Document Outline 面板
- 在父控制器的View子节点列表中,找到你添加的Container View条目
- 按住条目直接拖动到所有需要显示在它上层的父视图内容的最下方位置(视图层级列表中越靠下的条目渲染优先级越高、越靠上的条目越处于视觉底层)
- 调整完成后正常给Container View设置布局约束即可,运行后会自动固定在背景层,不会遮挡父视图上的文本、按钮、图片等原有展示内容。
代码动态调整层级
如果需要运行时动态控制层级,直接在父视图控制器的生命周期方法里调用系统API把子视图推到最底层即可:
override func viewDidLoad() { super.viewDidLoad() // 取出Container View嵌入的子控制器视图,直接发送到父视图最底层 if let embeddedContainerView = children.first?.view { view.sendSubviewToBack(embeddedContainerView) } }
注意排查两个容易踩的坑:
- 不要在滑动手势相关的交互代码里误调用
bringSubviewToFront方法把Container View提到上层- 如果父视图上需要展示的控件设置了全透明alpha、或者被误设为hidden,会看起来像是被Container遮挡,调整前先确认上层控件的显示属性正常
内容的提问来源于stack exchange,提问作者zisf98
相关产品推荐
相关产品推荐

