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

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

直奔主题

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

#import "UINavigationBar+DZGFixSpace.h"
#import <objc/runtime.h>

@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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、wax 中新建对象: 2、wax 中方法的参数,第一个默认必须是 self,这样,在该方法中,就可以通过 se...
    木蜗壳阅读 1,565评论 0 4
  • 今天上午,体彩·五环体育杯2019环中原自行车公开赛(长垣站)暨长垣县首届“亿隆杯”自行车公开赛鸣枪开赛。 家门口...
    梦幻公主赵阅读 165评论 0 4
  • 这篇文章写于地铁上…… 相隔上一篇文章已经过去很多天了,中间发生了很多事,我正处在一种自闭的状态当中,希望我们的心...
    cherry琛阅读 153评论 0 1
  • 青春也许。总会有遗憾。才如此。让人难以忘记。 凌晨四点,躺在床上翻来覆去,最终选择放弃,睁开双眼,去回顾半醒半梦中...
    留乙阅读 317评论 0 1

友情链接更多精彩内容