如何在UIPageViewController中动态隐藏或让视频置于UIPageControl上方?
解决UIPageViewController中视频覆盖UIPageControl的问题
嘿,我之前也碰到过一模一样的困扰!你说得太对了,zPosition只在同级视图之间才会生效——而UIPageControl默认是UIPageViewController的直接子视图,你的视频却嵌套在子页面控制器里,属于完全割裂的视图层级,所以单纯改zPosition肯定没效果。下面给你两个亲测可行的解决方案:
方案一:把视频视图移到UIPageViewController的视图层级中
这是最直接的办法,让视频和UIPageControl变成同级兄弟视图:
- 先拿到UIPageViewController的根视图(也就是
pageViewController.view) - 当用户触发视频展示事件时,把你的视频视图作为子视图添加到这个根视图上
- 调整视频视图的布局(用frame或者Auto Layout约束),让它显示在你需要的位置
- 手动设置视频视图的层级优先级,确保它盖在UIPageControl上面:
// 遍历找到UIPageControl if let pageControl = pageViewController.view.subviews.first(where: { $0 is UIPageControl }) as? UIPageControl { videoView.layer.zPosition = pageControl.layer.zPosition + 1 } - 别忘了在视频播放结束、页面切换或者子控制器销毁时,把视频视图从根视图上移除,避免内存泄漏和视图混乱
方案二:自定义UIPageControl并接管层级
如果不想改动UIPageViewController的默认视图结构,可以自己控制UIPageControl的创建和管理:
- 先把UIPageViewController自带的UIPageControl隐藏掉:
pageViewController.pageControl.isHidden = true - 在你的容器视图(比如子页面控制器的父容器,或者全局的根容器)中添加自定义的UIPageControl
- 监听UIPageViewController的页面切换事件(比如通过
UIPageViewControllerDelegate的didFinishAnimating方法),同步更新自定义UIPageControl的currentPage - 这时你的视频视图和自定义UIPageControl处于同一层级,直接调整
zPosition就能让视频盖在上方了
这两个方案我都实际用过,方案一实现起来更快,方案二更灵活,你可以根据自己的项目结构选合适的~
内容的提问来源于stack exchange,提问作者Crashalot
相关产品推荐
相关产品推荐

