我正在使用以下代码为我的 UINavigationBarUIToolbar 设置自定义图像:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar"] forBarMetrics:UIBarMetricsDefault];
[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"toolbar"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

我正在使用 PhotoViewer 并将其 View Controller 插入 View 。它应该有一个半透明的导航栏和工具栏,但它使用了我提供的半透明图形。

问题是,稍后当我插入另一个 View Controller 时(从 PhotoViewer 弹回 super 后)它的工具栏也是半透明的,这意味着内容位于它后面。

我没有运气就尝试了以下方法:
[[UINavigationBar appearanceWhenContainedIn:[EGOPhotoViewController class], nil] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearanceWhenContainedIn:[EGOPhotoViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[[UIToolbar appearanceWhenContainedIn:[EGOPhotoViewController class], nil] setBarStyle:UIBarStyleBlackTranslucent];
[[UIToolbar appearanceWhenContainedIn:[EGOPhotoViewController class], nil] setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

有什么想法可以让我为 PhotoViewer 实现黑色半透明 barStyle 并将其他所有内容保留在我的自定义图形中?

更新: 为了获得一些帮助,我将一个示例项目与导航栏的自定义图形放在一起,然后在使用外观代理时尝试显示带有半透明导航栏的推送 View Controller ,但没有成功: EXAMPLE PROJECT

最佳答案

我已经下载了您的示例项目并设法修复了它。我会解释是什么问题。

首先,UINavigationBar 包含在 UINavigationController 中。因此,RootViewController 和 TranslucentViewController 使用相同的 UINavigationBar 实例。也许这会引起困惑。此外,这可能就是 +appearanceWhenContainedIn: 没有按预期工作的原因。

要在整个应用程序中设置导航栏的背景图像,您应该使用 +appearance。要在导航 Controller 中设置单个导航栏的背景图像,请使用 UINavigationBar 的 -setBackgroundImagE:forBarMetrics:。

代码:在-TranslucentViewController viewWillAppear:设置背景图片和条形样式。在 RootViewController 中,再次设置背景图像和栏样式。根据我的经验,最好在 -viewWillAppear: 中更改导航栏,而不是 -in viewWillDisappear:(或者您需要跟踪将其改回的内容。)

在 RootViewController 中

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

    [self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"orangeNavigationBar.png"] forBarMetrics:UIBarMetricsDefault];
}

在半透明 View Controller 中
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

    [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setBarStyle:UIBarStyleBlackTranslucent];
}

哦和:只在这些地方改变它。不是在插入 View Controller 或任何东西时。

关于ios - UINavigationBar + UIToolBar UIAppearance 以及应用程序某些部分的半透明 barStyle?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12142775/

10-14 20:52