iOS7 QLPreviewController 改变导航栏颜色?

Posted

技术标签:

【中文标题】iOS7 QLPreviewController 改变导航栏颜色?【英文标题】:iOS7 QLPreviewController change navigation bar color? 【发布时间】:2013-11-14 09:07:48 【问题描述】:

如何在 QLPreviewController 中设置半透明属性我已经尝试了下面的代码,但它不起作用

  QLPreviewController *previewer = [[QLPreviewController alloc] init];
// Set data source
[previewer setDataSource:self];
[previewer setDelegate:self];
previewer.edgesForExtendedLayout = UIRectEdgeNone;
[previewer setCurrentPreviewItemIndex:index];
[self.navigationController.navigationBar setTranslucent:NO];
[self.navigationController setToolbarHidden:NO];
[[self navigationController] pushViewController:previewer animated:YES];

谢谢

【问题讨论】:

【参考方案1】:

你可以用这个:

UINavigationBar *navBar =  [UINavigationBar appearanceWhenContainedIn:[QLPreviewController class], nil];
[navBar setBackgroundImage:[UIImage imageNamed:@"navigation-bg-ios7.png"] forBarMetrics:UIBarMetricsDefault];

我试过了,效果很好。

【讨论】:

【参考方案2】:

截至 2018 年 2 月,Swift 3 和 4 对我有效

import QuickLook

UINavigationBar.appearance(whenContainedInInstancesOf: [QLPreviewController.self]).setBackgroundImage(UIImage.init(color: primaryColor), for: .default)

这是扩展中带有颜色功能的图像

extension UIImage 

    //image with color
    convenience init?(color: UIColor) 
        let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let path = UIBezierPath(rect: rect)
        color.setFill()
        path.fill()
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.init(cgImage: image!.cgImage!)
    

【讨论】:

【参考方案3】:
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

注意:仅适用于 iOS7

【讨论】:

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

以 Core Data 为数据源的 QLPreviewController

在 QLPreviewController 中禁用复制操作

SwiftUI 中的 QLPreviewController 缺少导航栏

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

iOS - QLPreviewController 延迟

QLPreviewController NavigationBar barTintColor