• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - iOS8 和 iOS9 中的 UITableView contentSize 计算方式不同?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 14:53:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用下面的代码来强制 uitableview “对齐行”:

- (void)scrollViewDidEndDraggingUIScrollView *)scrollView willDecelerateBOOL)decelerate {
    // if decelerating, let scrollViewDidEndDecelerating: handle it
    if (decelerate == NO) {
        [self centerTable];
    }
}

- (void)scrollViewDidEndDeceleratingUIScrollView *)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 中,表格 View 不允许我捕捉到第一行或最后一行。如果我在索引路径计算之后在 centerTable 中放置一个断点,我会为表格 View 得到这个:

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 的计算方式不同???解决方法是什么?



Best Answer-推荐答案


虽然我不明白为什么 contentSize 不同,但这里是我针对准确居中问题的解决方法:

- (void)centerTableViewAnimatedBOOL)animated {
     NSIndexPath *centerCellIndexPath = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))];

     CGPoint contentOffset = CGPointMake(0, (centerCellIndexPath.row * self.tableView.rowHeight) - ((self.tableView.frame.size.height / 2) - (self.tableView.rowHeight / 2)));

     [self.tableView setContentOffset:contentOffset animated:animated];
}

所以基本上,我没有尝试使用 scrollToRowAtIndexPath,而是直接设置 contentOffset(您可以对其进行动画处理,这很好)。这似乎在 iOS 8 和 iOS 9 上运行良好。

关于ios - iOS8 和 iOS9 中的 UITableView contentSize 计算方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589811/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap