在iOS11中,系统对automaticallyAdjustsScrollViewInsets已经废弃,所以导致之前使用self.automaticallyAdjustsScrollViewInsets = NO;对tableView调整,失效,tableView整体上移了20pt
如图:
iOS11对ScrollView新增 UIScrollViewContentInsetAdjustmentBehavior
官方Api
typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
UIScrollViewContentInsetAdjustmentAutomatic, // Similar to .scrollableAxes, but for backward compatibility will also adjust the top & bottom contentInset when the scroll view is owned by a view controller with automaticallyAdjustsScrollViewInsets = YES inside a navigation controller, regardless of whether the scroll view is scrollable
UIScrollViewContentInsetAdjustmentScrollableAxes, // Edges for scrollable axes are adjusted (i.e., contentSize.width/height > frame.size.width/height or alwaysBounceHorizontal/Vertical = YES)
UIScrollViewContentInsetAdjustmentNever, // contentInset is not adjusted
UIScrollViewContentInsetAdjustmentAlways, // contentInset is always adjusted by the scroll view's safeAreaInsets
} API_AVAILABLE(ios(11.0),tvos(11.0));
解决方案
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else{
self.automaticallyAdjustsScrollViewInsets = NO;
}
至此,tableView上移的问题解决。
关于iPhone X适配
由于目前iPhone X还没有发售,所以,笔者知识用模拟器来对iPhone X进行适配,但过程遇到了一些问题:
首先,让我们了解一下iPhone X屏幕的一些新特性
关于iPhone X的设计,看看苹果开发者网站给我们的介绍
https://developer.apple.com/ios/human-interface-guidelines/overview/iphone-x/
在iPhone X之前,我们通常将状态栏和导航高度之和设置为一个常量宏
#define TOPBAR_HEIGHT 64
然而,iPhone X的状态栏高度并非20,而是44,也就是状态栏高度于导航栏高度之和为88,所以之前的宏定义对于iPhone X并不适用,那么解决这个适配问题就很容易了,
1,是判断手机型号是否为iPhone X,可能有人会想,直接[[UIDevice currentDevice] model]获取到手机型号,但是目前并没有iPhone X真机,而模拟器也只能获取到iPhone Simulator ,
所以这个判断方式并不可行,那么,就只能根据屏幕的分辨率来判断了(但是这个就要区分是横屏还是竖屏)难免还是有点麻烦
2,笔者目前采用的就是这个方式,那就是直接获取状态栏高度与导航的高度之和,那也就是我们可以修改一下我们的宏定义为:#define TOPBAR_HEIGHT [UIApplication sharedApplication].statusBarFrame.size.height + 44,经过我的尝试,完美解决,当然这种改动也是最小的。
之后还有关于iPhone X相关的适配问题后续抽空再分享。