大型标题和默认标题之间的背景色互操作性

时间:2018-10-16 10:01:18

标签: ios large-title

在浏览带有一些预定义主题的页面时,我一直在更改导航栏的背景和文本颜色,这些主题包括一些纯色和清晰(透明)的背景色。

在将iOS 11中引入的大标题应用于某些视图控制器时,我发现使用大标题存在一些约束:

  • 要更改大标题的背景颜色,应使用UINavigationBar.barTintColor属性。
  • 由于此属性不适用于默认标题,因此应使用UINavigationBar.setBackgroundImage(_:for:)传递参数UIBarMetrics.default来设置背景图像。

我们的应用程序应在导航时动态更改其导航栏的主题,如果它推送没有大标题的视图控制器并弹出回到根目录(使用大标题),则导航栏顶部的状态栏区域突然变为空白永远不会回到初始状态。

以下是更改导航栏主题的代码段:

// This snippet is always called in -viewWillAppear(_:)
UINavigationBar *navigationBar = self.navigationController.navigationBar;
UIColor *backgroundColor; // can be clear, solid, or any other colors

navigationBar.backgroundColor = backgroundColor;

if (isTransparent) {
    [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    [navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefaultPrompt];
} else {
    [navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
    [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
}

经过进一步调查,我发现是否使用非nil -setBackgroundImage:forBarMetrics:和指标UIImage调用了UIBarMetricsDefault,没有办法重置它。整个导航堆栈都可以正常工作,因为在给定指标中设置了图像,而在其他指标中没有设置图像,对于我来说,UIBarMetricsDefaultPrompt

似乎在更改导航栏颜色时无法使用大标题和默认标题。如果任何人遇到相同的问题,请告诉我是否有解决此设置的方法。

0 个答案:

没有答案