iOS 11之后 导航栏返回按钮位置问题

很久没有关注过这个问题了,最近有一个oc的老项目需要调整,所以简单记录一下
也是对之前的一篇关于导航栏的记录小白告白的更新补充

直奔主题

创建一个NavigationBar的category 利用runtime在layoutSubviews的时候把layoutMargins的偏移设置为0就好了,
下面代码直接复制到项目就OK

#import "UINavigationBar+DZGFixSpace.h"
#import 

@implementation UINavigationBar (DZGFixSpace)

+(void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method originalMethodImp = class_getInstanceMethod(self, @selector(layoutSubviews));
        Method destMethodImp = class_getInstanceMethod(self, @selector(dzg_layoutSubviews));
        method_exchangeImplementations(originalMethodImp, destMethodImp);
    });
}

-(void)dzg_layoutSubviews{
    
    [self dzg_layoutSubviews];
    
    if ([UIDevice currentDevice].systemVersion.floatValue >= 11) {
        self.layoutMargins = UIEdgeInsetsZero;
        for (UIView *subview in self.subviews) {
            if ([NSStringFromClass(subview.class) containsString:@"ContentView"]) {
                subview.layoutMargins = UIEdgeInsetsZero;
            }
        }
    }
}


@end

什么问题需要这样做,详细原理说明参考
为什么会这样
怎么解决

你可能感兴趣的:(iOS 11之后 导航栏返回按钮位置问题)