4
QLPreviewController * preview = [[QLPreviewController alloc] init];
preview.dataSource = self;
preview.currentPreviewItemIndex = sender.tag;
preview.editing= YES; 
[self presentModalViewController:preview animated:YES];
[preview release];

这两行对我不起作用。所以在写这些行之前要小心。

[preview.tabBarController.tabBar setTintColor:[UIColor blackColor]];
[preview navigationController].navigationBar setTintColor: [UIColor blackColor]];

问题截图在这里

4

4 回答 4

13

从 iOS5 开始,您可以基于实例、全局或包含在特定容器类中时为控件设置主题。从 iOS6 开始,前一种子类化 QLPreviewController 来设置 UINavigationBar 的 tintColor 的方法停止工作。

考虑以下之一作为与 iOS5 和 iOS6 兼容的解决方法示例:

QLPreviewController 中包含的任何 UINavigationBar:

[[UINavigationBar appearanceWhenContainedIn:[QLPreviewController class], nil]
        setTintColor:[UIColor blackColor]];

或全局设置应用程序中所有 UINavigationBar 实例的 tintColor:

 [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

同样的策略也适用于 UITabBarController。

于 2013-04-11T01:34:46.857 回答
2

用这条线设置样式UINavigationController..

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

viewWillAppear并且要更改 TabBar 的颜色,只需在您的类中添加以下代码

CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
UIView *v = [[UIView alloc] initWithFrame:frame];
[v setBackgroundColor:[UIColor colorWithRed:0.1 green:0.2 blue:0.6 alpha:0.8]];
[v setAlpha:0.5];
[[self.tabBarController tabBar] insertSubview:v atIndex:0];
[v release];
于 2012-11-21T12:02:07.557 回答
2

如果您想更改导航栏的 tintColor,您可以推送您的 QLPreviewController,而不是模态显示它:

//i assume that you already have a navigationController
[[self navigationController] pushViewController:previewer animated:YES];
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]];

对于底部栏,我认为这是 UIToolbar 而不是 UITabBar,可能您无法更改颜色(我不知道),但您肯定不能调用preview.tabBarController.tabBar.

于 2012-11-21T12:16:30.760 回答
0

我找到了一个解决方案,虽然它不是正确的方法,但它有效:

制作子类QLPreviewController

MyQLPreviewController.h

@interface MyQLPreviewController : QLPreviewController

@end

并在该新子类的 .m 中,复制以下代码

@implementation MyQLPreviewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    UIToolbar *toolbar = [self getToolBarFromView:self.view]; //NOTE: Not the correct apperoach! could not think better solution, as iOS does not allow to access the toolbar properties in QLPreviewController

    toolbar.barTintColor = [UIColor redColor];

}

- (UIToolbar *)getToolBarFromView:(UIView *)view
{
    for (UIView *subView in view.subviews)
    {
        if ([subView isKindOfClass:[UIToolbar class]])
        {
            return (UIToolbar *)subView;
        }
        else
        {
            UIToolbar *toolBar = [self getToolBarFromView:subView];

            if (toolBar)
            {
                return toolBar;
            }
        }
    }
    return nil;
}
于 2017-09-12T11:23:01.047 回答