UITableView cellForRow(at :)在滚动

时间:2017-05-18 17:03:29

标签: ios swift uitableview uiscrollview

我需要在用户的头像周围显示边框,但仅限于桌子中心的用户单元格。此外,边界宽度与其距中心的距离成正比。

因此,我在UIScrollView委托方法scrollViewDidScroll API中使用了我的单元格更新逻辑,然后使用UITableView contentOffset.y获取中间单元格。一旦我知道了表的中心点,我就要求表格在那个时刻给我单元格,然后更新它的值。

但是,对tableView.cellForRow(at:) 随机的调用会引发异常并崩溃。我确实守护nil值,但不知道如何处理因异常而导致的崩溃。

另外,当引发异常时,注意centerLevelCellIndexPath值对我来说很好 - 第0行第3行(我的UITableView总是有1个部分,大约5-6行)

func scrollViewDidScroll(_ scrollView: UIScrollView) {
  if scrollView is UITableView {
    let tableViewCenterContentOffset = CGPoint(x: tableView.center.x, y: tableView.contentOffset.y + tableView.bounds.height/2)
    guard let centerLevelCellIndexPath = tableView.indexPathForRow(at: tableViewCenterContentOffset) else {
        return
    }
    guard let cell = tableView.cellForRow(at: centerLevelCellIndexPath),      // <--- Crashes here
        let centerLevelCell =  cell as? MyCustomCell,
        let collectionView = centerLevelCell.collectionView else {
            return
    }

以下是异常调用堆栈的屏幕截图 -

enter image description here

0 个答案:

没有答案