在动态单元格高度的表视图中滚动不起作用

时间:2017-12-19 16:53:01

标签: ios swift uitableview dynamic scroll

我正在以编程方式在Swift 4中使用UITableView构建聊天应用程序。此表视图具有动态单元格高度。所以当我向表视图插入一个新行并调用

self.m_ChatTable.scrollToRow(at: lastIndex, at: .top, animated: true)

无法正常工作。例如,当我向表视图插入两个新行时,插入第二行后第一行变为可见,插入第三行后第二行变为可见。 tableView中的滚动高度不正确。

代码

override func viewDidLoad() {
    super.viewDidLoad()

    m_ChatTable.rowHeight = UITableViewAutomaticDimension
    m_ChatTable.separatorStyle = .none
    m_ChatTable.delegate = self
    m_ChatTable.dataSource = self

    m_MainScrollView.addSubview(m_ChatTable)

    m_ChatTable.reloadData()
    // Do any additional setup after loading the view.
}



func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
    {

        let msg:Message = m_MessageList[indexPath.row] as Message
        return msg.height + 10


    }

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat
    {
        return 50 // for example
    }

    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }

    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        let msg = m_MessageList[indexPath.row]
        if (0 != msg.height)
        {
            return msg.height + 10
        }
        else
        {
           return UITableViewAutomaticDimension
        }

    }

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        let height = cell.frame.height
        m_MessageList[indexPath.row].height = height
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return self.m_MessageList.count
    }

0 个答案:

没有答案