问题一
- 描述
- 当列表有多余一页的数据,上拉加载数据且
reloadData
完成后,tableView的contentOffset发生了不必要的变化,导致列表会向上拉动一段位移,观察发现,reloadData
之后,tableView
的contentOffset
发生了几次变化。 -
如图
image.png
- 当列表有多余一页的数据,上拉加载数据且
- 原因
Google了一下,发现原因是 iOS11 中默认开启了Self-Sizing
,即Headers
,Footers
, andCells
都默认开启Self-Sizing
,所有estimated
高度默认值从iOS11之前的0.0
改变为UITableViewAutomaticDimension
。我们的项目虽然没有使用estimateRowHeight
属性,在iOS11
的环境下默认开启Self-Sizing
之后,这样就会造成contentSize
和contentOffset
值发生不可预知的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize
的值是一点点地变化更新的,所有cell
显示完后才是最终的contentSize
值,因为不会缓存正确的行高,reloadData
的时候,会重新计算contentSize
,就有可能会引起contentOffset
的变化
@property (nonatomic) CGFloat estimatedRowHeight NS_AVAILABLE_IOS(7_0); // default is UITableViewAutomaticDimension, set to 0 to disable
- 解决方案
通过关闭Self-Sizing
,可以解决上述问题
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
问题二
- 描述
- 报名榜样房UI错乱
-
如图
image.png
- 原因
iOS11对导航栏有较大改动,现在rightBarButtonItem
是不能获取到相对于导航栏的坐标了
_lineImageView.left = frame.origin.x + frame.size.width / 2.0;
- 解决方案
因没有找到合适获取坐标的方案,所以给定了左边距离边框的宽度
_lineImageView.left = yScreenWidth - (18.0 + frame.size.width / 2.0);
问题三
- 描述
- 各种主页下拉箭头露了出来
-
如图
image.png - 解决方案
if (kSystemVersion >= 11.0 && [self.managerOwner isKindOfClass:[UIScrollView class]]) {
UIScrollView *tempScrollView = (UIScrollView *)self.managerOwner;
if (@available(iOS 11.0, *)) {
tempScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
}
问题四
- 描述
- TabBar发布按钮点击,奔溃!
- 日志如下
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<UIView: 0x127dcd820; frame = (0 0; 320 568); layer = <CALayer: 0x1c0239600>> has been added as a subview to <UIVisualEffectView: 0x127dcbda0; frame = (0 0; 320 568); layer = <CALayer: 0x1c022fd00>>. Do not add subviews directly to the visual effect view itself, instead add them to the -contentView.'
- 原因
查看UIVisualEffectView
发现了不能在它上面直接添加子视图,需要添加在它的contentView上
@property (nonatomic, strong, readonly) UIView *contentView; // Do not add subviews directly to UIVisualEffectView, use this view instead.
- 解决方案
//[self.bgView addSubview:self.contentView];
[self.bgView.contentView addSubview:self.contentView];
上面的bgView是UIVisualEffectView
网友评论