此时,viewController的self.view会自动下移20px,从原来的屏幕左上角(0,0),下移到(0,20),因此界面适配就需要考虑这一点:
1)界面适配尽量使用相对布局
2)可借助通知UIApplicationDidChangeStatusBarFrameNotification,来监测状态栏的变化。
下面说说,我个人在项目中关于界面适配的做法。
考虑大多界面都是需要导航栏的,而个别界面则从原点开始,如下图二:
IMG_6359.png
故而,我使用了BaseViewController,在base中,设置navigationController.navigationBar.translucent为true,同时在非iOS 11.0的系统下,关闭self.automaticallyAdjustsScrollViewInsets
如此,确保self.view从(0,0)位置开始布局,而非导航存在时的(0,64)位置开始。而后,创建了统一的gmBgV,使得gmBgV的位置从导航的左下角位置开始,代码如下:
- (UIView *)gmBgV{
if (_gmBgV == nil) {
_gmBgV = [[UIView alloc] init];
_gmBgV.backgroundColor = [UIColor whiteColor];
[self.view addSubview:_gmBgV];
[self.view sendSubviewToBack:_gmBgV];
[_gmBgV mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.view);
make.top.equalTo(self.view).offset(HHiPhoneX?88:64);
make.bottom.equalTo(self.view).offset(self.isPushed?-HHSafeAreaBottomHeight:-HHSafeAreaBottomHeight-54);
}];
}
return _gmBgV;
}
在导航存在的页面,则将view添加在self.gmBgV上,而如图二的页面,则直接添加在self.View上。
使用相对布局,热点开启与关闭,界面不再需要另行适配。
网友评论