最近项目中有关于做iPhoneX屏幕适配问题,关键是这个项目已经做的差不多了,唯独iPhoneX屏幕没有适配,然后这个适配任务就落到我身上了,好了,话不多说,开始记录。。。
开始搞时在网上也查看了很多资料,但是由于第一次做iPhoneX的适配,很多东西也是先学。
首先第一步很重要找对你项目的启动图,也就是ios初次进入的屏幕加载图,一定要设置到 iPhoneX Landscape iOS 11+ 的上面。
这个就是将启动图设置成功了,下面进入测试,看是否能全屏加载。其实 ios 他们用这个启动图进行自动适配。
下面就是进行ios安全区域的问题了,否则的话,你在四周最靠边的地方按钮或者其他操作会受到影响,开始进行代码
1.修改ViewController.mm 增加ios11的新回调方法(ViewController.mm这个文件需要去找到自己项目下对应的文件 )
- (void)viewSafeAreaInsetsDidChange {
[super viewSafeAreaInsetsDidChange];
NSLog(@"viewSafeAreaInsetsDidChange %@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));
[self updateOrientation];
}
bool changeViewFrame = false;
- (void)updateOrientation {
if (@available(iOS 11.0, *)) {
CGRect rect = [[UIScreenmainScreen]bounds];
CGSize size = rect.size;
CGFloat width = size.width;
CGFloat height = size.height;
CGFloat scale_screen = [UIScreenmainScreen].scale;
//通过分辨率判断是否是iPhoneX手机
if (width*scale_screen ==2436and height*scale_screen ==1125)
{
if (self.view and !changeViewFrame)
{
CGRect s = CGRectMake(self.view.safeAreaInsets.left,0,self.view.frame.size.width - self.view.safeAreaInsets.left - self.view.safeAreaInsets.right,
self.view.frame.size.height - self.view.safeAreaInsets.bottom);
//x,y,width,height
self.view.frame = s;
// 只需要记录一次,因为每次change view frame 都会改变一次这个
changeViewFrame = true;
}
}
} else {
}
}
2.修改Controller.mm 增加全屏背景默认纯色背景(Controller.mm这个文件需要去找到自己项目下对应的文件 )
在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这个方法下增加一个更改颜色或者图片,下边是用的颜色,,
if (@available(iOS 11.0, *))
{
CGRect rect = [[UIScreenmainScreen]bounds];
CGSize size = rect.size;
CGFloat width = size.width;
CGFloat height = size.height;
CGFloat scale_screen = [UIScreenmainScreen].scale;
//通过分辨率判断是否是iPhoneX手机
if (width*scale_screen ==2436and height*scale_screen ==1125)
{
CGRect s = CGRectMake(0,0,_viewController.view.frame.size.width + _viewController.view.safeAreaInsets.left + _viewController.view.safeAreaInsets.right,_viewController.view.frame.size.height + _viewController.view.safeAreaInsets.bottom);
UIView *Ucolor = [[UIView alloc]initWithFrame:s];
Ucolor.backgroundColor = [UIColor darkGrayColor]; // 设置全局默认背景色 darkGrayColor whiteColor
[window addSubview:Ucolor];
[window sendSubviewToBack:Ucolor];
}
}
,在这里给小伙伴们分享一个设置rgb颜色的方法:
[UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]
图片是在 iPhoneX的判断里加,替换掉颜色即可:
UIImageView* imageViewL = [[UIImageViewalloc]initWithFrame:viewLeft.bounds];
imageViewL.image = [UIImageimageNamed:@"bg_back.png"];
[viewLeft addSubview:imageViewL];
[window addSubview:viewLeft];
[window sendSubviewToBack:viewLeft];
UIView *viewRight = [[UIViewalloc]initWithFrame:CGRectMake(_viewController.view.frame.size.width + 31,0,31,_viewController.view.frame.size.height)];
UIImageView* imageView = [[UIImageViewalloc]initWithFrame:viewRight.bounds];
imageView.image = [UIImageimageNamed:@"bg_back.png"];
[viewRight addSubview:imageView];
[window addSubview:viewRight];
[window sendSubviewToBack:viewRight];
到这里,也就差不多了,但是呢,有强迫症的小伙伴们,想要把iPhoneX下的横条隐藏掉,点击后出现,下面就是它的方法:
这个方法是在ViewController.mm这个文件中,
- (BOOL)prefersHomeIndicatorAutoHidden{
return YES;
}
到此,小伙伴们,大佬我就要告辞了,该下班了。希望大神可以分享一下其他适配方法!!!