美文网首页ios开发记录
iOS11修复导航栏按钮位置偏移问题

iOS11修复导航栏按钮位置偏移问题

作者: 帅聪哥 | 来源:发表于2021-03-15 10:19 被阅读0次

    iOS11后,系统更改了UINavigationBar的布局结构,所以会导致自定义导航按钮的位置会便的很离谱。现在推荐一个简单方法:
    有两种方法:
    1、如果是全局通用,则使用扩展,

    @implementation UINavigationBar (BDFixSpace)
    
    +(void)load {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            Method originalMethodImp = class_getInstanceMethod(self, @selector(layoutSubviews));
            Method destMethodImp = class_getInstanceMethod(self, @selector(bd_layoutSubviews));
            method_exchangeImplementations(originalMethodImp, destMethodImp);
        });
    }
    
    -(void)bd_layoutSubviews{
        
        [self bd_layoutSubviews];
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) containsString:@"_UINavigationBarContentView"]) {
                UIEdgeInsets margins = subview.layoutMargins;
                if(CURRENT_VERSION >= 11.0){
                    subview.frame = CGRectMake(-margins.left*0.5, -margins.top, margins.left*0.5 + margins.right*0.5 + subview.frame.size.width, margins.top + margins.bottom + subview.frame.size.height);
                }else{
                    margins = UIEdgeInsetsZero;
                }
                break;
            }
        }
    }
    

    2、如果是自定义navigationbar,则重写layoutsubview方法即可

    -(void)layoutSubviews{
        
        [self layoutSubviews];
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass([subview class]) containsString:@"_UINavigationBarContentView"]) {
                UIEdgeInsets margins = subview.layoutMargins;
                if(CURRENT_VERSION >= 11.0){
                    subview.frame = CGRectMake(-margins.left*0.5, -margins.top, margins.left*0.5 + margins.right*0.5 + subview.frame.size.width, margins.top + margins.bottom + subview.frame.size.height);
                }else{
                    margins = UIEdgeInsetsZero;
                }
                break;
            }
        }
    }
    

    是不是很简单!
    谢谢,如果帮到你还请点个赞哈!

    相关文章

      网友评论

        本文标题:iOS11修复导航栏按钮位置偏移问题

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