在浏览带有一些预定义主题的页面时,我一直在更改导航栏的背景和文本颜色,这些主题包括一些纯色和清晰(透明)的背景色。
在将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
。
似乎在更改导航栏颜色时无法使用大标题和默认标题。如果任何人遇到相同的问题,请告诉我是否有解决此设置的方法。