问题:
最近在做iPhone X的适配,出现了一个很奇怪的现象,如图:
image.png但是这个bug不是必现的,是在present某一个VC,diss之后出现的。
原因:
去网上查了下原因:
在iPhone X设备带有tabBar的页面,如果控制器的hidesBottomBarWhenPushed属性为YES,进行push操作之后,便会出现如下的一些问题,于是我查看了一次苹果系统的一些应用,发现它们是不隐藏tabBar的,估计是苹果就是不希望我们去隐藏它的tabBar
。。。。。。。。
具体原因正在探究,
不过我的项目里确实用的是系统的UITabBarController
解决方法:
直接上代码:
1、自定义一个UITabBar:
.h文件
@interface BaseTabar : UITabBar
@end
.m文件
@implementation BaseTabar
{
UIEdgeInsets _oldSafeAreaInsets;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_oldSafeAreaInsets = UIEdgeInsetsZero;
}
return self;
}
- (void)awakeFromNib {
[super awakeFromNib];
_oldSafeAreaInsets = UIEdgeInsetsZero;
}
- (void)safeAreaInsetsDidChange {
[super safeAreaInsetsDidChange];
if (!UIEdgeInsetsEqualToEdgeInsets(_oldSafeAreaInsets, self.safeAreaInsets)) {
[self invalidateIntrinsicContentSize];
if (self.superview) {
[self.superview setNeedsLayout];
[self.superview layoutSubviews];
}
}
}
- (CGSize)sizeThatFits:(CGSize)size {
size = [super sizeThatFits:size];
if (@available(iOS 11.0, *)) {
float bottomInset = self.safeAreaInsets.bottom;
if (bottomInset > 0 && size.height < 50 && (size.height + bottomInset < 90)) {
size.height += bottomInset;
}
}
return size;
}
- (void)setFrame:(CGRect)frame {
if (self.superview) {
if (frame.origin.y + frame.size.height != self.superview.frame.size.height) {
frame.origin.y = self.superview.frame.size.height - frame.size.height;
}
}
[super setFrame:frame];
}
2、自定义一个UITabBarController
1、导入头文件#import "BaseTabar.h"
- (void)viewDidLoad {
[super viewDidLoad];
//如果是iPhone X机型
if (IS_IPHONE_RONG_X) {
ADLCBaseTabar *baseTabBar = [[ADLCBaseTabar alloc] init];
[self setValue:baseTabBar forKey:@"tabBar"];
}
self.tabBar.tintColor = [UIColor redColor];
}
参考文章:
iPhone X push操作后tabBar偏移问题
https://stackoverflow.com/a/47225653/1553324
网友评论