1. tableView的的顶部适配
UIViewController 的属性automaticallyAdjustsScrollViewInsets在ios11 开始弃用了,使用scrollView的contentInsetAdjustmentBehavior 代替,个人感觉比较合理
如果不针对ios11 适配,那么没有视图控制器的顶部会出现向下偏移
看看automaticallyAdjustsScrollViewInsets:
Description
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets.
The default value of this property is YES, which lets container view controllers know that they should adjust the scroll view insets of this view controller’s view to account for screen areas consumed by a status bar, search bar, navigation bar, toolbar, or tab bar. Set this property to NO if your view controller implementation manages its own scroll view inset adjustments.
SDKs iOS 7.0+, tvOS 9.0+
大概意思是调整高度依据是:状态栏,搜索栏,导航栏,工具栏,tabBar,默认情况下属性都是yes ,会根据这些控件是否有无确定调整高度,但是实际情况是,我们在没有导航栏的状态下不希望调整,但是它会自动调整到状态栏的高度,这不是我们要的效果,so 我们需要手动设置为no 或者never 。
总结:没有导航栏我们不希望调整,需要设置no 或者never ,注意属性的兼容性适配问题
UIViewController:
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES
UIScrollView:
@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior
兼容性代码如下:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"11.0")) {
//防止在xcode8 编译不过,通过这种键值的方式;否则可以直接使用属性的方式
[self.tableView setValue:@(2) forKey:@"contentInsetAdjustmentBehavior"];
or
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
-----------
//操作系统版本判断
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
2. 使用第三方控件MJRefresh 出现的问题:多次执行和刷新跳动
- 2.1上拉会导致方法多次调用,其实是上拉行为被多次识别,查找github 源码,是因为ios11后tableView的属性默认值有了变化
打印输出self.tableView.estimatedRowHeight
结果是-1
同样的self.tableView.estimatedSectionFooterHeight
self.tableView.estimatedSectionHeaderHeight
解决办法设置默认值为0,可以让这些属性禁用,因为我们自己有实现cell 高度的协议,不需要使用默认值,所以设置为0禁用那些默认值,
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
ps: ios 11之前的系统关于self.tableView.estimatedRowHeight 的默认值不知道是不是0 ,因为已经升级xcode9,待确定
网友评论