UIDocumentInteractionController с полупрозрачной панелью навигации
Ааа, я схожу с ума... Я часами пытаюсь заставить NavigationBar моего UIDocumentInteractionController НЕ быть полупрозрачным, но ничего не работает..
Он представлен в качестве предварительного просмотра
_docController = [UIDocumentInteractionController new];
_docController.delegate = self;
[_docController setURL:[NSURL fileURLWithPath:_attachmentPath]];
[_docController presentPreviewAnimated:YES];
Затем я попытался назначить NavigationController из исходного ViewController (который не является полупрозрачным):
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller {
return [self navigationController];
}
Это не сработало... NavigationBar в DocumentPreview по-прежнему полупрозрачный.
ОК, поэтому я попытался манипулировать панелью навигации:
- (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:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UINavigationBar appearance] setTranslucent:NO];
}
Это тоже не сработало... нет, у меня нет дальнейших идей, что я могу сделать. Я также просмотрел все вопросы и ответы здесь и не нашел никакого решения.
Это ошибка? Или ты знаешь как я мог решить эту проблему?
--- Мое решение ---
Поскольку я не нашел универсального решения, я теперь нашел обходной путь, добавив черное подпредставление под панелью навигации:
- (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;
}
Не лучшее решение, но оно работает...
1 ответ
Вы можете дать ViewController вместо NavigationController. Используя приведенный ниже код UIDocumentInteractionController присутствует на текущем ViewController.
- (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.