一,UITableViewStyleGrouped与UITableViewStyleplain的区别:
1)如果设置了分组,那么UITableViewStyleGrouped就会有分组样式,有header也有footer 的区分,但是UITableViewStyleplain却没有区分左图为UITableViewStyleGrouped
2)UITableViewStyleplain顶部有滞留效果,详情参考https://blog.csdn.net/rodulf/article/details/52967447
如何解决UITableViewStyleplain顶部滞留的一个问题?
答:- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 30;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
二.iOS11的变化
1)如果不写tableviewcell的代理方法 viewForHeaderInSection和viewForFooterInSection那么设置heightForFooterInSection和heightForHeaderInSection是无效的,如果不去实现iewForHeaderInSection和viewForFooterInSection这两个方法,需要把estimatedRowHeight,estimatedSectionHeaderHeight,estimatedSectionFooterHeight设置为0;
2)iOS11之前statusBar + NavigationBar为64 ,iOS11之后如果设置了prefersLargeTitles=yes则为96PT,如果不设置大标题,默认还是64,但在iPhoneX上由于刘海的出现statusBar由以前的20pt变成了44pt,所以iPhoneX上高度变为88pt
3)对titleView布局的影响,textfield或者searchBar设置
成titleView会出现变短的问题,无论如何设置width,都无济于事
原因:这是因为iOS11之前titleView也是直接添加在UINavigationBar上面的,但是在iOS11之后,因为largeTitle的原因,视图层级发生了变化
titleView和navigationBarButton都加在了_UINavigationBarContentView上面
解决办法:对titleview 重写intrinsicContentSize方法
4)MJRefresh错位等 使用UIScrollview的控件的页面造成的页面错位self.myTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
三,iPhoneX适配指南:
1)基本属性:启动图尺寸 375*812pt @3x
导航栏+状态栏 = 88 (导航栏高度仍是44个点,状态栏高度增高为44个点,所以刘海的高度并不是状态栏的高度。状态栏和导航栏平分了头部总的高度) tabbar高度:83.0个点(原是固定49个点,增高了34个点。所以)
2)替换写死的状态栏高度20 导航栏44 和64。安全起见替换写死的tabbar高度49:
1 - (CGFloat)tabbarHeight{
2 return self.tabBarController.tabBar.frame.size.height;
3 }
4
5 - (CGFloat)navigationBarHeight{
6 return self.navigationController.navigationBar.frame.size.height;
7 }
8
9 - (CGFloat)naviBarAndStatusBarHeight{
10 CGFloat height = self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height;
11 return height;
12 }