在 QLPreviewController 中更改导航栏颜色

Posted

技术标签:

【中文标题】在 QLPreviewController 中更改导航栏颜色【英文标题】:Change navigation bar color in QLPreviewController 【发布时间】:2018-02-16 07:22:49 【问题描述】:

我想在 swift 3 中更改 QLPreviewController 的导航栏颜色。我使用下面的代码更改颜色,但它不起作用

viewQLPreview = QLPreviewController()
viewQLPreview.dataSource = self
viewQLPreview.delegate = self
viewQLPreview.navigationController?.navigationBar.isTranslucent = false
viewQLPreview.navigationController?.navigationBar.tintColor = UIColor.red

【问题讨论】:

如果对你有用,试试这个:***.com/questions/46239664/… 或者这个***.com/a/64154848/1836420 【参考方案1】:

我使用下面的代码在 swift 3.0 中更改 QLPreviewController 的导航栏颜色

UINavigationBar.appearance().barTintColor = UIColor.red

UINavigationBar.appearance(whenContainedInInstancesOf: [QLPreviewController.self]).backgroundColor = UIColor.red

【讨论】:

QLPreviewController 在我执行此操作时未找到。 UIKit 被导入到文件中。知道要导入什么才能使用 QLPreviewController? QLPreviewController 位于 QuickLook 中:import QuickLook【参考方案2】:

在 QLPreviewController 之前使用下面的代码:

UINavigationBar.appearance().tintColor = UIColor.red
UINavigationBar.appearance().barTintColor = UIColor.blue
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.red]
UINavigationBar.appearance().setBackgroundImage(fromColor(color: UIColor.blue), for: .default)
UINavigationBar.appearance().isTranslucent = false 

func fromColor (color: UIColor) -> UIImage
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size)
        let context: CGContext? = UIGraphicsGetCurrentContext()
        context?.setFillColor(color.cgColor)
        context?.fill(rect)
        let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image ?? UIImage()
    

【讨论】:

【参考方案3】:

将下面的代码放在QLPreviewController的viewDidLoad中。

viewQLPreview.navigationController?.navigationBar.isTranslucent = false
viewQLPreview.navigationController?.navigationBar.tintColor = UIColor.red

还要确保viewQLPreview.navigationController != nil

如果您正在推送QLPreviewController,那么此代码将起作用....

如果您展示的是 QLPreviewController,那么您需要确保 rootController 应该是导航控制器,在您的情况下......

let viewQLPreview = QLPreviewController()
let nav = UINavigationController(rootViewController: viewQLPreview)
self.present(nav, animated: true, completion: nil)

【讨论】:

感谢您使用您的代码回答我可以更改颜色,但取消按钮不在导航栏中。 只需要设置导航栏的tintColor和barTintColor即可。:) 这对我来说是完美的答案,感谢您的解释

以上是关于在 QLPreviewController 中更改导航栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在子视图中使用 QLPreviewController 显示页面洗涤器

QLPreviewController 在 iOS 6 中不起作用

停止 QLPreviewController 在呈现的视图控制器中调整大小

qlpreviewcontroller 在 iOS 中点击全屏

SwiftUI 中的 QLPreviewController 缺少导航栏

QLPreviewController 在其上显示模态视图控制器后失去联系