嵌入式UITableView一次呈现每个单元格

时间:2017-12-09 00:59:07

标签: ios swift uitableview

结构:UITableView - > UITableViewCell - > UITableView - >的UITableViewCell

我刚刚发现嵌入在UITableViewCell中的UITableView将立即渲染其所有单元格!这包括所有不可见的细胞。

我的tableView有数百个单元格,cellForRowAtIndexPath,WillDisplay和EndDisplaying都在同时触发。

图像加载和我的分页算法导致巨大的性能命中。有谁知道如何防止这种行为发生?

----------更新:我发现的快速N DILTY解决方案------------

func fixCellBug(_ cell: SearchCard) {
    let top = max(tableView.contentOffset.y - cell.frame.minY - 30, 0) // 30 is slightly higher than the approximate minY of the tableView relative to its cell
    cell.tableView.transform = CGAffineTransform(translationX: 0, y: top)
    cell.tableView.contentOffset = CGPoint(x: 0, y: top)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    for cell in tableView.visibleCells {
        if let c = cell as? SearchCard {
            fixCellBug(c)
        }
    }
}

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if let c = cell as? SearchCard {
        fixCellBug(c)
    }
}

还为嵌入式tableView的高度创建一个IBOutlet,在master tableview中的cellForRowAt中将高度设置为cell.tableViewHeight.constant = view.frame.height

如果单元格的帧与tableview的帧重叠,则tableview将仅呈现单元格。因此,我们需要将tableview的框架缩小到最多屏幕的高度。当用户滚动时,我们还需要偏移嵌入式tableView的top和contentOffset以将tableView固定到屏幕的中心。

0 个答案:

没有答案