如果我使用工具栏,UISplitViewController 的颜色显示不正确

Posted

技术标签:

【中文标题】如果我使用工具栏,UISplitViewController 的颜色显示不正确【英文标题】:UISplitViewController incorrect display of colors if I using toolbar 【发布时间】:2020-07-24 14:41:19 【问题描述】:

我的应用 D 有一点问题: 当我在 DetailVC 中使用 UIToolbar 时,我在 MasterVC 中得到错误的 UINavigationBar 和 UITabBar 颜色。该问题只能在 iPhone Plus 上重现,同时从纵向模式切换到横向(或反向)。更改屏幕方向后,UINavigationBar 和 UITabBar 变为灰色(灰色是 UISplitView 的默认背景颜色)。如果我在 UIToolBar 中将 BarTintColor 的值设置为不为零,则问题不存在。

那么,有没有什么方法可以在 UIToolbar 中使用 barTintColor 的 nil 值并获得酷炫的模糊效果?谢谢

截图:

正常状态:启动应用程序并以横向模式打开此控制器后

Bug:启动应用程序并以纵向模式打开此控制器并将屏幕方向切换为横向模式后


您可以使用相同的 Storyboard 重现此问题。我没有使用约束。

【问题讨论】:

如何在别人的机器上重现你的结果?你没说清楚。你想寻求帮助吗? @OwenZhao,对不起。我附上了故事板 【参考方案1】:

在我的测试中,只需将 UIToolbar 的 'barTintColor' 设置为 .clear 就足够了。

更新

你需要一个 UISplitViewControllerDelegate。

extension SplitViewController: UISplitViewControllerDelegate 
    func primaryViewController(forExpanding splitViewController: UISplitViewController) -> UIViewController? 
        let mainViewController = splitViewController.viewControllers.first?.children.first

        if let bar = (mainViewController as? MainTableViewController)?.tabBar 
            if traitCollection.userInterfaceStyle == .dark 
                bar.barTintColor = .clear
             else 
                bar.barTintColor = nil
            
        

        let navController = UINavigationController(rootViewController: mainViewController!)

        return navController
    

理论

创建另一个 UINavigationController 以避免默认的错误。

【讨论】:

是的,为 UIToolbar 设置颜色可以解决 UINavigationBar 显示问题,但是在这种情况下,UIToolbar 后面的模糊看起来与值为 nil 时不同。我的目标是保持标准模糊 我还没有找到解决方案。但是,每当您单击左侧的单元格时,该栏将再次变为正常状态。所以这应该是一个错误。 感谢您的帮助,但问题仍未解决。上述方法只是掩盖了问题,并没有解决问题。添加额外的 UINavigationController 保持一切不变。 这是一个错误。除了苹果,没有人能解决它。我的解决方案是一种解决方法。这是一个错误的常见举动。

以上是关于如果我使用工具栏,UISplitViewController 的颜色显示不正确的主要内容,如果未能解决你的问题,请参考以下文章

如果我想直观地映射一个编程框架并查看所有实体之间的关系,我应该使用哪个工具? [关闭]

在所有活动中使用工具栏 (Android)

如果使用导航控制器,如何删除某些片段中的底部导航视图和工具栏?

产品经理常用工具AxureVisioMindmanager使用解析(摘)

如果任何单元测试失败,如何使 Python 的覆盖工具失败?

当我使用浏览器的开发工具查看页面上的某些元素时会发生啥?