美文网首页
iOS 15 导航栏适配问题附解决方案

iOS 15 导航栏适配问题附解决方案

作者: 西行客要闭关修炼 | 来源:发表于2021-10-13 11:19 被阅读0次

    在做iOS 15的适配过程中,导航栏适配遇到了一个奇怪的问题,就是原来隐藏的返回按钮的文字,失效了。
    上代码

    // AppDelegate.m
    // 定制返回按钮
        UIImage *backButtonImage = [[UIImage imageNamed:@"custom_back_icon"] imageWithPadding:UIEdgeInsetsMake(8, 8, -8, 0)];
        
        // 隐藏返回按钮文字
        [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, -200) forBarMetrics:UIBarMetricsDefault];
        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
    
        // 导航栏样式
        [[UINavigationBar appearance] setTintColor:[UIColor colorFromHex:@"#1B1C33"]];
        [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
        [[UINavigationBar appearance] setBackIndicatorImage:backButtonImage];
        [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage];
        
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        UIColor *color = [UIColor blackColor];
        UIFont *font = [UIFont fontWithName:@"PingFangSC-Medium" size:17.0f];
        [dict setObject:color forKey:NSForegroundColorAttributeName];
        [dict setObject:font forKey:NSFontAttributeName];
        [[UINavigationBar appearance] setTitleTextAttributes:dict];
        
        // iOS 15适配
        if (@available(iOS 13.0, *)) {
            UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
            [appearance setBackgroundColor:[UIColor whiteColor]];
            [appearance setShadowImage:[UIImage createImageWithColor:[UIColor whiteColor]]];
            appearance.titleTextAttributes = dict;
            [appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
            [[UINavigationBar appearance] setScrollEdgeAppearance: appearance];
            [[UINavigationBar appearance] setStandardAppearance:appearance];
        }
    

    我将最后的iOS 15适配的内容注释掉,则导航栏返回按钮的文案可以正常隐藏,加上这段逻辑则不能隐藏。有大佬遇到过这类问题吗?求助大佬帮忙看看。

    后来参考了overstackflow上的解决办法,解决了此问题。根本原因是 UINavigationBarAppearance 的配置会覆盖原有的配置导致隐藏返回按钮文案失效。代码如下

        // iOS 15适配
        if (@available(iOS 15.0, *)) {
            UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
            [appearance setBackgroundColor:[UIColor whiteColor]];
            [appearance setShadowImage:[DFCMacros createImageWithColor:[UIColor whiteColor]]];
            appearance.titleTextAttributes = dict;
            [appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
            // UINavigationBarAppearance 会覆盖原有的导航栏设置,这里需要重新设置返回按钮隐藏
            appearance.backButtonAppearance.normal.titlePositionAdjustment = UIOffsetMake(NSIntegerMin, -200);
    
            [[UINavigationBar appearance] setScrollEdgeAppearance: appearance];
            [[UINavigationBar appearance] setStandardAppearance:appearance];
        }
    
    

    stackoverflow问题地址 https://stackoverflow.com/questions/59882220/uibarbuttonitem-setbackbuttontitlepositionadjustment-doesnt-work

    相关文章

      网友评论

          本文标题:iOS 15 导航栏适配问题附解决方案

          本文链接:https://www.haomeiwen.com/subject/bnmdyctx.html