gpt4 book ai didi

iphone - QLPreviewController NavigationBar setTranslucent 属性不起作用

转载 作者:行者123 更新时间:2023-12-03 18:42:41 28 4
gpt4 key购买 nike

我已将自定义颜色设置为 QLPreviewController 的导航栏但问题是我想要 QLPreviewController 中导航栏的深色即使我已将导航栏半透明属性设置为否但我不知道为什么它不起作用

我想要像下面的图片这样

enter image description here

但它显示如下图

enter image description here

QLPreviewController *previewer = [[QLPreviewController alloc] init];
// Set data source
[previewer setDataSource:self];
[previewer setDelegate:self];
// Which item to preview
[previewer setCurrentPreviewItemIndex:index];
[previewer.view addGestureRecognizer:singleTap];
previewer.navigationController.navigationBar.translucent = NO;
previewer.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent=NO;
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
[self.navigationController pushViewController:previewer animated:TRUE ];

即使我也尝试过这样,但它也不起作用

    - (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
// Break the path into it's components (filename and extension)
// Use the filename (index 0) and the extension (index 1) to get path
//lblFileName.text=[strFileName stringByReplacingOccurrencesOfString:@"movefile" withString:@""];

// For navigation bar color and text attributes of navigation bar
for (id object in controller.childViewControllers)
{
if ([object isKindOfClass:[UINavigationController class]])
{
UINavigationController *navController = object;
navController.navigationBar.translucent=NO;
navController.navigationBar.barTintColor = [UIColor redColor];;
navController.toolbar.translucent=NO;
navController.toolbar.barTintColor=[UIColor redColor];;
[navController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil]];


}
}

NSString *strFilename=[[NSBundle mainBundle]pathForResource:@"final" ofType:@"png"];

return [NSURL fileURLWithPath:strFilename];
}

请告诉我哪里出错了提前致谢

最佳答案

主要问题是,当您尝试设置导航栏的半透明度时,您还没有将预览 Controller 推送到导航堆栈上。此时,预览 Controller 已分配并实例化,但其 View 尚未加载或添加到 View 层次结构中,并且 previewer.navigationController 的值为 nil。此时 self.navigationController 的值不是 nil,但您在此处设置的半透明属性将被覆盖,作为推送预览 Controller 的副作用。获得所需效果的最简单方法是交换语句的顺序,如下所示:

[self.navigationController pushViewController:previewer animated:YES];
self.navigationController.navigationBar.translucent = NO;

请注意,当导航栏的半透明度设置为“否”时,预览的内容将从导航栏下方开始,这可能不是您想要的。解决该问题的最简单方法是在预览 Controller 的 View 出现在屏幕上之后设置半透明度属性。您可以通过子类化 QLPreviewController 来完成此操作:

@interface PreviewController : QLPreviewController

@end

@implementation PreviewController

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

self.navigationController.navigationBar.translucent = NO;
}

请注意,当您以模态方式呈现预览 Controller (而不是将其推送到导航堆栈上)时,事情会变得更加复杂。在这种情况下,没有可用于访问导航栏的导航 Controller ,您需要依赖 QLPreviewController 的内部 View 层次结构。以下代码在 iOS7 中有效,但在更高版本中可能会崩溃:

[self presentViewController:previewController animated:YES completion:^{

UIView *view = [[[previewController.view.subviews lastObject] subviews] lastObject];
if ([view isKindOfClass:[UINavigationBar class]])
{
((UINavigationBar *)view).translucent = NO;
}

}];

关于iphone - QLPreviewController NavigationBar setTranslucent 属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015216/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com