[英]Change NavigationBar background on UIDocumentInteractionController
[英]UIDocumentInteractionController with translucent NavigationBar
啊,我快疯了……自数小时以来,我一直在努力使UIDocumentInteractionController的NavigationBar不透明,但没有任何效果..
它显示为预览
_docController = [UIDocumentInteractionController new];
_docController.delegate = self;
[_docController setURL:[NSURL fileURLWithPath:_attachmentPath]];
[_docController presentPreviewAnimated:YES];
然后,我尝试从初始ViewController(不是半透明的)分配NavigationController:
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
return [self navigationController];
}
那没有用。DocumentPreview中的NavigationBar仍然是半透明的。
OK,所以我尝试操纵NavigationBar:
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
UINavigationController *nc = [self navigationController];
[nc.navigationBar setAlpha:1.0];
[nc.navigationBar setTranslucent:NO];
[nc.navigationBar setOpaque:NO];
[nc.navigationBar setBarStyle:UIBarStyleBlack];
return nc;
}
同样在这里,NavigationBar仍然是半透明的。 接下来,我尝试在AppDelegate中更改整个App的外观:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UINavigationBar appearance] setTranslucent:NO];
}
那也不起作用……不,我没有其他想法可以做什么。 我也在这里搜索了所有问答,但没有找到任何解决方案。
是虫子吗? 还是您知道我该如何解决这个问题?
-我的解决方案-
由于找不到通用解决方案,因此我现在通过在NavigationBar下添加黑色子视图来解决问题:
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
UINavigationController *nc = [self navigationController];
CGFloat navbarHeight = self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height;
CGRect xFrame = CGRectMake(0.0f,
0.0f,
self.view.frame.size.width,
navbarHeight);
UIView *blackView = [[UIView alloc] initWithFrame:xFrame];
blackView.backgroundColor = [UIColor blackColor];
[nc.view insertSubview:blackView atIndex:1];
return nc;
}
不是最好的解决方案,但它可以工作...
您可以给ViewController而不是NavigationController。 使用当前ViewController上存在的以下代码UIDocumentInteractionController。
- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {
[[UINavigationBar appearance] setTintColor:self.navigationController.navigationBar.tintColor];
[[UINavigationBar appearance] setBarTintColor:self.navigationController.navigationBar.barTintColor];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:self.navigationController.navigationBar.tintColor}];
[[UINavigationBar appearance] setBackgroundImage:[self.class imageFromColor:self.navigationController.navigationBar.barTintColor] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTranslucent:false];
return self;
}
+ (UIImage *)imageFromColor:(UIColor *)color {
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
setTranslucent = false,在显示的UIDocumentInteractionController上工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.