iOS12适配指南
2024-08-27 18:12:02
1.重复文件报错
build Phases-> 删除多余的info.plist
2.library not found for -lstdc++
苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是lib转载自斗玩网stdc++已经标记为废弃有5年了,建议大家使用经过了llvm优化过并且全面支持C++11的libc++库。
建议把代码调整为依赖 libc++库 如果你引用的第三方厂商提供的sdk中依赖了libstdc++,联系厂商
3.StatusBar内部结构改变
现象:crash
crash log:
-[_UIStatusBarIdentifier isEqualToString:]: unrecognized selector sent to instance 0x283452820
* Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[_UIStatusBarIdentifier isEqualToString:]: unrecognized selector sent to instance 0x283452820’
解决方案:
+ (NSString *)getIphoneXNetWorkStates {
UIApplication *app = [UIApplication sharedApplication];
id statusBar = [[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"statusBar"];
id one = [statusBar valueForKeyPath:@"regions"];
id two = [one valueForKeyPath:@"trailing"];
NSArray *three = [two valueForKeyPath:@"displayItems"];
NSString *state = @"无网络";
for (UIView *view in three) {
//alert: iOS12.0 情况下identifier的变成了类"_UIStatusBarIdentifier"而不是NSString,所以会在调用“isEqualToString”方法时发生crash,
//修改前
// NSString *identifier = [view valueForKeyPath:@"identifier"];
//修改后
NSString *identifier = [[view valueForKeyPath:@"identifier"] description];
if ([identifier isEqualToString:@"_UIStatusBarWifiItem.signalStrengthDisplayIdentifier"]) {
id item = [view valueForKeyPath:@"_item"];
//alert: 这个问题和上边一样itemId是_UIStatusBarIdentifier 类型,不是string
NSString *itemId = [[item valueForKeyPath:@"identifier"] description];
if ([itemId isEqualToString:@"_UIStatusBarWifiItem"]) {
state = @"WIFI";
}
state = @"不确定";
} else if ([identifier isEqualToString:@"_UIStatusBarCellularItem.typeDisplayIdentifier"]) {
UIView *statusBarStringView = [view valueForKeyPath:@"_view"];
// 4G/3G/E
state = [statusBarStringView valueForKeyPath:@"text"];
}
}
return state;
}
4.新版本iPhoneXR,iPhoneXS,iPhoneXS MAX适配
- 各个机型枚举
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhoneXS_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)
目前iPhonex都是刘海屏,判断处这个特性,就可以统一做适配了
#define isIPhoneXAll ([UIScreen mainScreen].bounds.size.height == 812 || [UIScreen mainScreen].bounds.size.height == 896)
目前iPhonex都是刘海屏,状态栏的高度均为44pt
#define isIPhoneXAl ([[UIApplication sharedApplication] statusBarFrame].size.height == 44)
针对继承自UIScrollView的,需要处理一下内边距 第一步:关闭自动调整内边距
if (@available(iOS 11.0, *)) {
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
最新文章
- 视图控制器的View整体上移问题
- H5常用代码:适配方案5
- 数据结构算法C语言实现(二十七)--- 7.2图的遍历
- GridLayoutManager
- Servlet &; JSP - Java Web 访问资源的路径问题
- (hdu)1285 确定比赛名次
- 2、Charm Bracelet( poj 3624)简单0-1背包
- [性能分析]linux文件描述符(转)
- OC-UICollectionView实现瀑布流
- Unix - 文件中构成一个空洞的分析
- ajax调用WebAPI添加数据
- Win7 VS2017 Boost Python入门
- Vue 开源项目库汇总(转)
- EL表达式和JSTL标签库
- 设计模式-结构型模式,python桥接模式
- @OneToMany、@ManyToOne以及@ManyToMany讲解
- sparkr——报错
- wepy build 错误 [Error] 未发现相关 less 编译器配置,请检查wepy.config.js文件。
- 购物车功能:使用jQuery实现购物车全选反选,单选,商品增删,小计等功能
- 解决Gearman 报sqlite3错误
热门文章
- Eclipse Qt开发环境的建立
- 转:攻击JavaWeb应用[5]-MVC安全
- 7/31 CSU-ACM2018暑期训练7-贪心
- python实现RabbitMQ同步跟异步消费模型
- JZYZOJ1376 [coci2011]友好数对 容斥定理 状态压缩
- poj 3464(Trie)Approximations
- BZOJ 3669 [Noi2014]魔法森林(贪心+LCT)
- [SRM568]DisjointSemicircles
- 【BFS】【并查集】【Tarjan】【LCA】Gym - 101173H - Hangar Hurdles
- [经验]我的电脑只有IE64位浏览器能上网,其他软件都上不了网