UIPageViewController 中控制器后面的黑色背景

Posted

技术标签:

【中文标题】UIPageViewController 中控制器后面的黑色背景【英文标题】:Black background behind controllers in UIPageViewController 【发布时间】:2019-03-13 12:31:03 【问题描述】:

我有一个简单的 UIPageViewController,它有 3 个页面,它们都是 ViewControllers 嵌入在 NavigationControllers 中的。

当我滚动浏览这些页面时,在整个滚动过程中,右侧页面的背景是黑色的。当控制器卡入到位时,它会恢复正常。

Here's how it looks.

我该如何解决这个问题??

已解决:在UIPageViewController 的子类中:self.view.backgroundColor = .white

代码:

lazy var viewControllerList: [UIViewController] = 
    let sb = UIStoryboard(name: "Main", bundle: nil)

    let yesterdayVC = sb.instantiateViewController(withIdentifier: "Yesterday")
    let todayVC = sb.instantiateViewController(withIdentifier: "Today")
    let tomorrowVC = sb.instantiateViewController(withIdentifier: "Tomorrow")

    return [yesterdayVC, todayVC, tomorrowVC]
()

override func viewDidLoad() 
    super.viewDidLoad()

    self.dataSource = self
    setViewControllers([viewControllerList[1]], direction: .forward, animated: true, completion: nil)


func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 

    guard let vcIndex = viewControllerList.firstIndex(of: viewController) else  return nil 

    let previousIndex = vcIndex - 1

    guard previousIndex >= 0 else  return nil 
    guard viewControllerList.count > previousIndex else  return nil 

    return viewControllerList[previousIndex]


func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 

    guard let vcIndex = viewControllerList.firstIndex(of: viewController) else  return nil 

    let nextIndex = vcIndex + 1

    guard viewControllerList.count > nextIndex else  return nil 

    return viewControllerList[nextIndex]

编辑:在 NavigationControllers 或 PageViewController 后面放置一个视图没有帮助。无论 PageViewController 背景是什么颜色,颜色总是黑色的。

【问题讨论】:

UIPageViewController black background when sliding more的可能重复 @ElTomato 这没有用,控制器后面的颜色仍然是黑色。 【参考方案1】:

子类化UIPageViewController 并在viewDidLoad() 中调用self.view.backgroundColor = .white。这应该可以解决您的问题。

【讨论】:

@sidyakinian 很高兴听到这个消息。请标记为已解决,以便关闭线程。【参考方案2】:

UIPageViewController 的视图是透明的,所以你看到的黑色就是窗口。因此,只需在您的应用委托或场景委托中更改窗口背景颜色,例如

self.window.backgroundColor = UIColor.whiteColor;

【讨论】:

以上是关于UIPageViewController 中控制器后面的黑色背景的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 中控制器的生命周期

解决 Rails 3.2 中控制器的视图路径

Spring 项目中控制器和服务类的通用类

yii2中控制器中怎么调用模型

Nestjs路由器中控制器如何拆分路由

限制 NinjaFramework 中控制器方法中的参数数量?