导航
1、iOS 11 多了一个LargeTitleView,大字标题,导致导航栏达到了96p,默认关闭
2、UINavigationBar的结构和barbutton,titleView的左右边距有变化
3、UINavigationBar的子视图有改变,模态进去的导航要小心使用
3.1 iOS11之前的导航
3.2 iOS11之后的导航
3.3 iOS 11之后通过presentViewController进入的导航
开发需注意点:
- 项目中用到状态栏和导航栏高度的地方要注意,最好不用写死
- 模态进入的导航,navigationBar上层会有一个UIImageView,可以遍历将这个UIImageView移除
- iOS11的导航在viewdidload中获取不到,有的设置在viewWillAppear中不生效,就放到ViewDidAppear中
列表
1、iOS11之前,scrollView不偏移64,就用automaticallyAdjustsScrollViewInsets = NO,而iOS11引入了
UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种:
-automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距.
-scrollableAxes 自动计算内边距.
-never不计算内边距
-always 根据safeAreaInsets 计算内边距
// 大神代码:
#define adjustsScrollViewInsets_NO(scrollView,vc)\
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
[scrollView performSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\
} else {\
vc.automaticallyAdjustsScrollViewInsets = NO;\
}\
_Pragma("clang diagnostic pop") \
} while (0)
或者
if (@available(iOS 11.0, *)) {
canvas.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
2、heightForHeader和heightForFooter设置完不起作用,必须同时实现viewForHeader和viewForFooter方法
3、tableView滑动代码失效:scrollToRowAtIndexPath仍然有效
[self.tableView scrollRectToVisible:CGRectMake(0, 0, SCREENW, 20) animated:YES];
[self.tableView setContentOffset:CGPointMake(0, 20) animated:YES];
iOS11的scrollView的列表滑动或者滑动动画,以及截长屏都会失效,是由于iOS11默认开启了iOS8引入的self-sizing概念,默认进入并没有加载所有的元素,所以contentSize在起初进入加载完毕的时候是不对的,关闭的方法就是:
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
开发需注意:
- 需要设置vc.automaticallyAdjustsScrollViewInsets的地方,换成adjustsScrollViewInsets_NO(scrollV,vc)的方法
- 列表下拉刷新的异常就是这个原因
2、由于phoneX的上下区域的特殊,引入的safeArea的概念,iOS11 cell的元素布局最好以cell.contentView作为参照去布局(横屏会有影响)
参考:https://www.lee1994.com/ios11ji-xcode9gua-pei-wen-ti-hui-zong/