Xcode 13 打包 在NavigationController-viewDidLoad中实现backIndicatorImage 失效

245 阅读1分钟

image.png 失效原因:

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
        }