我要动态添加文本时如何自动调整UITableViewCell的大小

时间:2019-04-08 11:11:09

标签: ios swift

我正在建立一个包含几个单元格的UITableView。当我按住一个单元格时,将显示一个菜单,我可以在单元格中添加注释/文本。 我要的是如果用户不插入任何注释,则不要显示注释标签的空白。但是,如果用户插入评论,则该标签将显示并显示整个插入的评论。 是否可以在不对单元格高度进行硬编码的情况下做到这一点?因为此应用程序将在多种设备上运行,并且屏幕各不相同。

我已经尝试在viewDidLoad中使用以下代码行使用自动布局:

questionsTableView.rowHeight = UITableView.automaticDimension
questionsTableView.estimatedRowHeight = 390

我还尝试过使用questionsTableView.beginUpdates在标签上添加注释,并在将注释分配给标签后使用questionsTableView.endUpdates,但仍然无法使用。

当用户运行应用程序时,如果用户添加任何评论,则无法扩展显示该单元格并显示标签: enter image description here

这是我的代码:

class MainVC: UIViewController {

    // Interface Links
    @IBOutlet weak var questionsTableView: UITableView!

    // Properties
    var imagePicker: UIImagePickerController!
    var firstCommentReceived = ""
    var secondCommentReceived = ""
    var images = [UIImage]()

    override func viewDidLoad() {
        super.viewDidLoad()

        questionsTableView.rowHeight = UITableView.automaticDimension
        questionsTableView.estimatedRowHeight = 390
    }
}

extension MainVC: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! MainCell
        cell.delegate = self
        cell.configCell()
        if !firstCommentReceived.isEmpty{
            cell.firstCommentLabel.text = firstCommentReceived
        }
        if !secondCommentReceived.isEmpty{
            cell.secondCommentLabel.text = secondCommentReceived
        }
        if !images.isEmpty{
            cell.selectedImageView.image = images[0]
        }
        return cell
    }

    // Set the height of each row from UITableView
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        return 390 // size of the maximum height of the cell if the user add comments and images. This size should be dynamic not hardcoded.
    }
}

在这里,我用我的问题创建了一个GitHub小示例: https://github.com/tygruletz/sendDataFromCellToController

如果您正在阅读本文,谢谢!

2 个答案:

答案 0 :(得分:1)

好吧,我查看了您的项目,发现您有布局问题^^“

1-您需要将单元格布局设置为从上到下的布局,我发现您错过了对单元格中最后一个元素(即图像)执行此操作的步骤

enter image description here

2-您需要找到要在其中使用的动态标签,例如注释1和2优先。

enter image description here enter image description here

3-最后,我发现您将像元高度设置为静态,在您的情况下应为动态

//设置UITableView中每一行的高度

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension // in your app it was 390
}

如果要查看,请修改项目代码

https://ufile.io/plddi

祝你好运;)

答案 1 :(得分:1)

只需给出底部imageView的底部约束,如您在屏幕快照中看到的那样,并使用设置行的高度

return UITableView.automaticDimension
//or you can remove this method

enter image description here