UI回顾
2019-11-08 本文已影响0人
刘建Chris
UITableView
- -dequeueReusableCellWithIdentifier: forIndexPath:
为什么要带IndexPath?
IndexPath 作用:该方法会根据cell的位置IndexPath,进行额外的配置
比如,从heightForRow方法中给cell配置高度
调用这个方法,具体内部怎么处理?
如果在重用池里面,有这个Identifier的cell, 则返回这个cell,cell里面会调用 -prepareForReuse方法;如果没有,则创建一个新的cell,如果是nib、storyboard,cell会调用-initWithCoder: , 如果是注册的cell , 则会调用-initWithStyle:reuseIdentifier:
- separatorInset
[table setSeparatorInset:UIEdgeInsetsMake(0, 50, 0, 50)];
这个属性,用来设置自带的分割线边距
我几乎不用,因为系统的分割线经常满足不了设计(比如组末cell隐藏需求,如果要实现也要根据index控制cell, 而且颜色难调,group模式,组头组尾都是满行分割线),还不如自己cell中写一个线
-
layoutMargins、directionalLayoutMargins 这两个属性
有待研究,研究布局的时候一起研究 -
UIScrollView自动设置内边距问题
IOS 11以前
当 automaticallyAdjustsScrollViewInsets 为YES(默认) 时,scrollView与, a status bar, search bar, navigation bar, toolbar, or tab bar 重合时候,系统会给scrollView设置内边距,防止scrollView被遮挡显示不全
IOS 11以后
当contentInsetAdjustmentBehavior 为 UIScrollViewContentInsetAdjustmentAutomatic(默认) 时,scrollView 不在安全区域(不在上边的bar,以及底部hom条的区域),系统会给scrollView设置内边距,防止scrollView被遮挡显示不全
但是有些情况这样设置效果不好,比如说,想整屏幕都是tableView,无导航条,tableView的headerView被status bar遮挡也无所谓,这种情况下, 自动内边距导致顶部难看,就需要取消自动内边距
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
如果设置不自动内边距后,还想底部适配安全区域,可以自己适配
if (@available(iOS 11.0, *)) {
table.contentInset = UIEdgeInsetsMake(0, 0, [UIApplication sharedApplication].keyWindow.safeAreaInsets.bottom, 0);
}
- contentSize、contentInset
- 布局
UINavigationController 的导航条 控制器的view顶部截取掉
截取时机
-viewWillAppear 方法中未截取
-viewWillLayoutSubviews方法中已经截取了(未调用[super viewWillLayoutSubviews]方法时已经截取了)
所以截取时机在以上2方法之间
控制器生命周期:
-viewDidLoad
-viewWillAppear
-viewWillLayoutSubviews
-viewDidLayoutSubviews
-viewDidAppear
-dealloc