Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView内部UITableView单元格从底部剪切_Ios_Swift_Uitableview_Autoresize - Fatal编程技术网

Ios UITableView内部UITableView单元格从底部剪切

Ios UITableView内部UITableView单元格从底部剪切,ios,swift,uitableview,autoresize,Ios,Swift,Uitableview,Autoresize,我有一个包含7种UITableViewCells的垂直列表。其中一个由单元内的UITableView组成 我的要求是主tableview应该根据单元格的内部tableview contentSize自动调整单元格大小。操作系统内部的tableview将显示其完整长度,滚动将关闭 工作正常,但仅适用于具有tableview的单元格。当我在内部tableview上方引入UIImageView(带有异步加载图像)时,单元格的总高度略小于其内容的实际高度。因此,内部的tableview从底部开始被切割

我有一个包含7种UITableViewCells的垂直列表。其中一个由单元内的UITableView组成

我的要求是主tableview应该根据单元格的内部tableview contentSize自动调整单元格大小。操作系统内部的tableview将显示其完整长度,滚动将关闭

工作正常,但仅适用于具有tableview的单元格。当我在内部tableview上方引入UIImageView(带有异步加载图像)时,单元格的总高度略小于其内容的实际高度。因此,内部的tableview从底部开始被切割

下面是bug的一个表示

我正在根据宽度设置UImageView的高度以正确缩放:

if let media = communityPost.media, media != "" {
                postImageView.sd_setImage(with: URL(string: media), placeholderImage: UIImage(named: "placeholder"), options: .highPriority) { (image, error, cache, url) in
                    if let image = image {
                        
                        let newWidth = self.postImageView.frame.width
                        
                        let scale = newWidth/image.size.width
                        let newHeight = image.size.height * scale
                        
                        if newHeight.isFinite && !newHeight.isNaN && newHeight != 0 {
                            self.postViewHeightConstraint.constant = newHeight
                        } else {
                            self.postViewHeightConstraint.constant = 0
                        }
                        
                        if let choices = communityPost.choices {
                            self.datasource = choices
                        }
                        self.tableView.reloadData()
                    }
                }
            } else {
                self.postViewHeightConstraint.constant = 0
                
                if let choices = communityPost.choices {
                    datasource = choices
                }
                tableView.reloadData()
            }
内部表视图是UITableView的一个子类:

class PollTableView: UITableView {
    override var intrinsicContentSize: CGSize {
        self.layoutIfNeeded()
        return self.contentSize
    }

    override var contentSize: CGSize {
        didSet{
            self.invalidateIntrinsicContentSize()
        }
    }

    override func reloadData() {
        super.reloadData()
        self.invalidateIntrinsicContentSize()
    }
}
主表视图设置为使用automaticDimension调整大小:


    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        cellHeights[indexPath] = cell.frame.size.height
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return cellHeights[indexPath] ?? UITableView.automaticDimension
    }
    
我似乎不明白出了什么问题。感谢您的帮助。
谢谢。

当表格视图要求您估算行高时,您正在调回表格视图。因此,您没有向它提供任何它还没有的信息。
问题可能在于您的异步加载图像,因此您应该预测图像大小,并在图像尚未加载时为表视图提供正确估计的行高。

如何预测图像大小?这实际上取决于您的应用程序。数据来自哪里?如果记录是从数据库/云/服务器检索的,那么它们应该包含一个描述图像大小的字段。好的。后端团队将添加映像的维度。我想那会有用的。我将计算单元格的高度加上图像高度和表格内容大小高度。