很久没有关注过这个问题了,最近有一个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
什么问题需要这样做,详细原理说明参考
为什么会这样
怎么解决