详解iOS11、iPhone X、Xcode9 适配指南

2020-01-21 01:06:14于丽

// 其他版本的手机
key = _inProcessProvider      type = @"<UIStatusBarStateProvider>"
key = _showsForeground       type = B
key = _backgroundView        type = @"UIStatusBarBackgroundView"
key = _doubleHeightLabel      type = @"UILabel"
key = _doubleHeightLabelContainer  type = @"UIView"
key = _currentDoubleHeightText   type = @"NSString"
key = _currentRawData        type = {超长。。}
key = _interruptedAnimationCompositeViews type = @"NSMutableArray"
key = _newStyleBackgroundView    type = @"UIStatusBarBackgroundView"
key = _newStyleForegroundView    type = @"UIStatusBarForegroundView"
key = _slidingStatusBar       type = @"UIStatusBar"
key = _styleAttributes       type = @"UIStatusBarStyleAttributes"
key = _waitingOnCallbackAfterChangingStyleOverridesLocally type = B
key = _suppressGlow         type = B
key = _translucentBackgroundAlpha  type = d
key = _showOnlyCenterItems     type = B
key = _foregroundViewShouldIgnoreStatusBarDataDuringAnimation type = B
key = _tintColor          type = @"UIColor"
key = _lastUsedBackgroundColor   type = @"UIColor"
key = _nextTintTransition      type = @"UIStatusBarStyleAnimationParameters"
key = _overrideHeight        type = @"NSNumber"
key = _disableRasterizationReasons type = @"NSMutableSet"
key = _timeHidden          type = B
key = _statusBarWindow       type = @"UIStatusBarWindow"

// iPhone X
key = _statusBar ; type = @"_UIStatusBar"

// 因此可见iPhone X的状态栏是多嵌套了一层,多取一次即可,最终适配代码为:
NSArray *children;
// 不能用 [[self deviceVersion] isEqualToString:@"iPhone X"] 来判断,因为模拟器不会返回 iPhone X
  if ([[application valueForKeyPath:@"_statusBar"] isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {
    children = [[[[application valueForKeyPath:@"_statusBar"] valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];
  } else {
    children = [[[application valueForKeyPath:@"_statusBar"] valueForKeyPath:@"foregroundView"] subviews];
  }

适配点二:解决这个问题后项目跑起来发现,整个app界面上下各空出大概40pt的高度

iOS11适配,iPhone,X适配,Xcode9,适配

经常从 Github 上下载项目把玩的老司机们都知道,有些老项目在模拟器上跑起来之后也会只有 iPhone 4(320*480)的布局空间,造成这个的原因是启动图使用 Launch Images Source 设置的时候没有勾选并设置对应的图片,解决方法如下

 

iOS11适配,iPhone,X适配,Xcode9,适配