如何实现UIPageViewController背景透明?附当前尝试代码
实现UIPageViewController背景透明的解决方案
我看了你这段尝试代码,目前你只处理了分页控件(UIPageControl)的透明设置,但要让整个UIPageViewController背景透明,还需要对PageViewController本身的视图以及子控制器的视图做调整,我帮你优化并补充完整:
关键修改点
- 给
pageviewcontroller的view设置透明背景 - 确保添加到PageViewController的子控制器view背景也是透明(否则会遮挡父视图的透明效果)
- 精简重复的代码逻辑
修改后的完整代码
super.viewDidLoad() // 初始化并配置PageViewController self.pageviewcontroller = self.storyboard?.instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController self.pageviewcontroller.dataSource = self self.pageviewcontroller.delegate = self // 核心:设置PageViewController的背景为透明 self.pageviewcontroller.view.backgroundColor = .clear // 配置分页控件UIPageControl let pageControl = UIPageControl.appearance() pageControl.backgroundColor = .clear pageControl.pageIndicatorTintColor = .gray pageControl.currentPageIndicatorTintColor = UIColor(red: 0.0, green: 1.0, blue: 1.0, alpha: 1.0) // 初始化子控制器并设置其背景透明 let dashboardVC = UIStoryboard(name: "Main", bundle: nil) .instantiateViewController(withIdentifier: "DashboardViewController") as! BaseViewController dashboardVC.view.backgroundColor = .clear // 子控制器背景透明 let qwertyVC = UIStoryboard(name: "Main", bundle: nil) .instantiateViewController(withIdentifier: "qwertyViewController") as! BaseViewController qwertyVC.view.backgroundColor = .clear // 子控制器背景透明 ViewControllers.append(dashboardVC) ViewControllers.append(qwertyVC) // 设置初始显示的控制器 if let firstViewController = ViewControllers.first { self.pageviewcontroller.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil) } // 别忘了把PageViewController添加到当前视图控制器的view中(如果之前没加的话) self.addChild(pageviewcontroller) self.view.addSubview(pageviewcontroller.view) pageviewcontroller.didMove(toParent: self)
额外说明
- 如果你的PageViewController是直接通过Storyboard嵌入的,那可以直接在Storyboard里把它的背景色设置为Clear Color,效果和代码里设置
view.backgroundColor = .clear一致 - 子控制器的背景一定要设为透明,不然它们会完全覆盖PageViewController的透明背景,导致你看不到下层内容
内容的提问来源于stack exchange,提问作者siva kumar




