当前位置: 首页 > news >正文

iOS开发 适配iPhoneX/iPhoneXr/iPhoneXs/iPhonexs max

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、写个单例

/**
.h文件
*/

@interface Singleton : NSObject

+(instancetype) shareInstance ;

@property (nonatomic, assign) CGFloat SafeAreaTopHeightX;//
@property (nonatomic, assign) CGFloat kStatusBarHeightX;//
@property (nonatomic, assign) CGFloat SafeAreaBottomHeightX;//

@end


/**
.m文件
*/

#import "Singleton.h"

static Singleton* _instance = nil;

@implementation Singleton

+(instancetype) shareInstance
{
    static dispatch_once_t onceToken ;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init] ;
    }) ;
    
    return _instance ;
}

@end

2、在AppDelegate.m文件中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
//必须写在这个位置,在window初始化完成时
    if (isIPhoneX()==1) {
        [Singleton shareInstance].SafeAreaTopHeightX = 88.0f;
        [Singleton shareInstance].SafeAreaBottomHeightX = 34.0f;
        [Singleton shareInstance].kStatusBarHeightX = 44.0f ;
        
    }else{
        [Singleton shareInstance].SafeAreaTopHeightX = 64.0f;
        [Singleton shareInstance].SafeAreaBottomHeightX = 0;
        [Singleton shareInstance].kStatusBarHeightX = 20.0f ;
    }
    
#pragma mark - 默认加载UI
    LoginController *loginVC = [[LoginController alloc] init];
    self.window.rootViewController = loginVC;
    self.window.rootViewController = mainVC;
    
    
    return YES;
}

static inline BOOL isIPhoneX() {
    BOOL iPhoneX = NO;
    /// 先判断设备是否是iPhone/iPod
    if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {
        return iPhoneX;
    }
    
    if (@available(iOS 11.0, *)) {
        /// 利用safeAreaInsets.bottom > 0.0来判断是否是iPhone X。
        UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];
        if (mainWindow.safeAreaInsets.bottom > 0.0) {
            iPhoneX = YES;
        }
    }
    
    return iPhoneX;
}

3、在.pch文件中 ,这样定义宏

//导航栏高度
#define SafeAreaTopHeight [Singleton shareInstance].SafeAreaTopHeightX
//状态栏
#define kStatusBarHeight [Singleton shareInstance].kStatusBarHeightX
//底部宏
#define SafeAreaBottomHeight [Singleton shareInstance].SafeAreaBottomHeightX

 

转载于:https://my.oschina.net/wenchengxu123/blog/2120145

相关文章:

  • 互融云采购招标供应链系统:为供应链行业创造良好环境
  • 第一次作业
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • 大数据
  • TitleBar 的那些设置
  • FR 在数据库查询中使用模板参数
  • 07-文本属性和字体属性,超链接导航栏案例,background,
  • python数据结构转换格式化
  • 服务器连接不成功测试办法
  • 英语发音规则---N字母
  • python深坑集锦 -- super
  • 反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
  • Linux下面如何运行.sh文件
  • windows下 python中报错ImportError: No module named 'requests'
  • SDUT-3331_数据结构实验之链表八:Farey序列
  • android 一些 utils
  • Apache的80端口被占用以及访问时报错403
  • C++类的相互关联
  • CODING 缺陷管理功能正式开始公测
  • git 常用命令
  • learning koa2.x
  • QQ浏览器x5内核的兼容性问题
  • SSH 免密登录
  • Terraform入门 - 1. 安装Terraform
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • tweak 支持第三方库
  • uni-app项目数字滚动
  • Webpack 4 学习01(基础配置)
  • 分布式熔断降级平台aegis
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 码农张的Bug人生 - 见面之礼
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端自动化解决方案
  • 小程序01:wepy框架整合iview webapp UI
  • Prometheus VS InfluxDB
  • UI设计初学者应该如何入门?
  • #Linux(Source Insight安装及工程建立)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4)logging(日志模块)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (九)信息融合方式简介
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net Stream篇(六)
  • .NET 中让 Task 支持带超时的异步等待
  • .net对接阿里云CSB服务
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET连接数据库方式
  • :not(:first-child)和:not(:last-child)的用法