【发布时间】:2016-02-23 22:49:27
【问题描述】:
我正在使用下面的代码来强制 uitableview “对齐行”:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
// if decelerating, let scrollViewDidEndDecelerating: handle it
if (decelerate == NO) {
[self centerTable];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self centerTable];
}
- (void)centerTable {
NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))];
[self.tableView scrollToRowAtIndexPath:pathForCenterCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
它在 iOS9 中运行良好,但在 iOS8 中,表格视图不允许我捕捉到第一行或最后一行。如果我在索引路径计算之后在centerTable 中放置一个断点,我会为表格视图得到这个:
iOS9:
<UITableView: 0x7fb9a6ed8600; frame = (0 0; 300 132); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fb9ae14cae0>; layer = <CALayer: 0x7fb9ad1b1540>; contentOffset: {0, 0}; contentSize: {300, 220}>
iOS8:
<UITableView: 0x7ff6e2d59800; frame = (0 0; 300 132); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ff6e8726130>; layer = <CALayer: 0x7ff6e214b450>; contentOffset: {0, 0}; contentSize: {300, 132.5}>
请注意,除了 contentSize 之外,一切都是一样的。这导致与 iOS9 相比,iOS8 中的索引路径为 n+1。
那么,为什么在 iOS8 系统中 contentSize 的计算方式不同???解决方法是什么?
【问题讨论】:
-
你用的是系统字体吗?
-
你实现
estimatedRowHeight和UITableViewAutomaticDimension了吗?更多这里stackoverflow.com/a/32975514/1702413
标签: ios uitableview ios8 ios9 contentsize