失效原因:
setNavigationBarHidden:animated: 会重置standardAppearance
解决方案:
重写setNavigationBarHidden:animated:或者pushViewController:animated:中实现以下方法
Object-C:
if (@available(iOS 13.0, *)) {
UINavigationBarAppearance *app = self.navigationBar.standardAppearance;
app.backgroundColor = UIColor.whiteColor;
app.backButtonAppearance.normal.titleTextAttributes = @{
NSForegroundColorAttributeName: UIColor.whiteColor
};
[app setBackIndicatorImage:_img transitionMaskImage:_img];
self.navigationBar.standardAppearance = app;
self.navigationBar.scrollEdgeAppearance = app;
}
Switf:
if #available(iOS 13.0, *) {
guard let img = UIImage(named: "nav_bar_icon")?.withRenderingMode(.alwaysOriginal) else {
return
}
guard let app = navigationController?.navigationBar.standardAppearance else {
return
}
app.backgroundColor = .white
app.titleTextAttributes = [.foregroundColor: UIColor.white]
app.setBackIndicatorImage(img, transitionMaskImage: img)
navigationController?.navigationBar.standardAppearance = app
navigationController?.navigationBar.scrollEdgeAppearance = app
}