1. 升级Xcode 9后本地图片不能正确的显示 ?
最近更新到Xcode9后,发现本地的图片都不能正常显示,后来发现如果是直接拉入到工程,Bundle Reources 里面并没有该资源图片,于是又手动添加了一遍,问题解决。如下 :
2. 由于iPhone X的状态栏结构发生了变化,此时利用系统状态栏判断网络状态的话会发生crash,如下
UIApplication *app = [UIApplicationsharedApplication];
NSArray *children = [[[appvalueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
// .... 该方法在 iPhone X 上会crash
改用ios 7 之后推出的currentRadioAccessTechnology
来判断当前的网络,需要使用到系统
import <CoreTelephony/CTTelephonyNetworkInfo.h>
框架里的内容。或者改用 Reachability来判断
- (void)networkStatus {
NSArray *typeStrings2G = @[CTRadioAccessTechnologyEdge,
CTRadioAccessTechnologyGPRS,
CTRadioAccessTechnologyCDMA1x];
NSArray *typeStrings3G = @[CTRadioAccessTechnologyHSDPA,
CTRadioAccessTechnologyWCDMA,
CTRadioAccessTechnologyHSUPA,
CTRadioAccessTechnologyCDMAEVDORev0,
CTRadioAccessTechnologyCDMAEVDORevA,
CTRadioAccessTechnologyCDMAEVDORevB,
CTRadioAccessTechnologyeHRPD];
NSArray *typeStrings4G = @[CTRadioAccessTechnologyLTE];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
CTTelephonyNetworkInfo *teleInfo= [[CTTelephonyNetworkInfo alloc] init];
NSString *accessString = teleInfo.currentRadioAccessTechnology;
if ([typeStrings4G containsObject:accessString]) {
NSLog(@"4G网络");
} else if ([typeStrings3G containsObject:accessString]) {
NSLog(@"3G网络");
} else if ([typeStrings2G containsObject:accessString]) {
NSLog(@"2G网络");
} else {
NSLog(@"未知网络");
}
} else {
NSLog(@"未知网络");
}
}
参考: http://blog.csdn.net/u011619283/article/details/51899988
3.导航栏高度的变化
iOS11之前导航栏默认高度为64pt(这里高度指statusBar + NavigationBar),iOS11之后如果设置了prefersLargeTitles = YES则为96pt,默认情况下还是64pt,但在iPhoneX上由于刘海的出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt,如果项目里隐藏了导航栏加了自定义按钮之类的,这里需要注意适配一下。
最新官方设计指南: https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
根据设备屏幕尺寸确定当前设备型号
iphone 4/4s => {320, 480}
iphone 5/5c/5s/SE => {320, 568}
iphone 6/6s/7/8 => {375, 667}
iphone 6p/6sp/7p/8p => {414, 736}
iphone X => {375, 812}
以下是写的一个分类,根据设备屏幕尺寸确定当前设备型号,利用屏幕尺寸判断iPhone X
typedef NS_ENUM(NSInteger, zhDeviceType) {
__IPHONE_4 = 0,
__IPHONE_5,
__IPHONE_6,
__IPHONE_6P,
__IPHONE_X,
__UNKNOWN
};
@interface UIDevice (zhDeviceType)
@property (class, nonatomic, assign, readonly) zhDeviceType deviceType;
@end
@implementation UIDevice (zhDeviceType)
+ (zhDeviceType)deviceType {
NSString *stringSize = NSStringFromCGSize([UIScreen mainScreen].bounds.size);
if ([stringSize isEqualToString:@"{320, 480}"]) { // iphone 4/4s
return __IPHONE_4;
} else if ([stringSize isEqualToString:@"{320, 568}"]) { // iphone 5/5c/5s/SE
return __IPHONE_5;
} else if ([stringSize isEqualToString:@"{375, 667}"]) { // iphone 6/6s/7/8
return __IPHONE_6;
} else if ([stringSize isEqualToString:@"{414, 736}"]) { // iphone 6p/6sp/7p/8p
return __IPHONE_6P;
} else if ([stringSize isEqualToString:@"{375, 812}"]) { // iphone X
return __IPHONE_X;
} else {
return __UNKNOWN;
}
}
@end
导航栏高度
// 根据设备获取导航栏高度 (正常情况下)
static inline CGFloat CGStatusBarHeight () {
return [NSStringFromCGSize([UIScreen mainScreen].bounds.size) isEqualToString:@"{375, 812}"] ? 44 : 20;
}