Unity中完美实现对iphoneX的全面屏适配,主要针对竖屏游戏

1 篇文章 0 订阅
1 篇文章 0 订阅

在unity中我们可以通过UI的设置锚点来实现不用尺寸屏幕的适配,但是iphoneX有“刘海”,会挡住游戏中的关键信息,如图:
这里写图片描述
解决的思路是:整个游戏的绘制区域缩短并下移32个单位(96像素高度)空出“刘海”(statusBar)的高度,然后把statusBar优雅的显示出来,最终效果在iphoneX上的截屏(实际效果可以想象一下,非常完美):
这里写图片描述

下面开始贴代码,都是在Xcode工程里实现的。

  • 整个游戏的绘制区域缩短并下移32个单位,找到这个函数:
    这里写图片描述
    修改:
    //_window           = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    CGRect winSize = [UIScreen mainScreen].bounds;
    if(winSize.size.height/winSize.size.width>2){
        winSize.size.height -=32;
        winSize.origin.y = 32;
    }
    _window = [[UIWindow alloc] initWithFrame:winSize];
  • 把statusBar优雅的显示出来,找到这两个函数:
    这里写图片描述
    这里写图片描述
    修改:
- (BOOL)prefersStatusBarHidden
{
    static bool _PrefersStatusBarHidden = true;

    static bool _PrefersStatusBarHiddenInited = false;
    if(!_PrefersStatusBarHiddenInited)
    {
        NSNumber* hidden = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIStatusBarHidden"];
        _PrefersStatusBarHidden = hidden ? [hidden boolValue] : YES;

        CGRect winSize = [UIScreen mainScreen].bounds;
        if(winSize.size.height/winSize.size.width>2){
            _PrefersStatusBarHidden = false;
            NSLog(@"show status bar");
        }

        _PrefersStatusBarHiddenInited = true;
    }

    return _PrefersStatusBarHidden;
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
    static UIStatusBarStyle _PreferredStatusBarStyle = UIStatusBarStyleDefault;

    static bool _PreferredStatusBarStyleInited = false;
    if(!_PreferredStatusBarStyleInited)
    {
        NSString* style = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UIStatusBarStyle"];
        if(style && ([style isEqualToString:@"UIStatusBarStyleBlackOpaque"] || [style isEqualToString:@"UIStatusBarStyleBlackTranslucent"]))
            _PreferredStatusBarStyle = UIStatusBarStyleLightContent;

        CGRect winSize = [UIScreen mainScreen].bounds;
        if(winSize.size.height/winSize.size.width>2){
            _PreferredStatusBarStyle = UIStatusBarStyleLightContent;
            NSLog(@"set status bar light");
        }
        _PreferredStatusBarStyleInited = true;
    }

    return _PreferredStatusBarStyle;
}

这里判断当前设备是否是iphoneX的方法比较粗暴,就是屏幕长宽比是不是超过2。愿意修改的同学可以自己改一下。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值