目前,我正在弄乱快速而动态的表格单元格高度。我在xcode6.1上为iOS8.1开发了一个简单的应用程序:https://github.com/ArtworkAD/DynamicCellTest

因此,要达到随单元格内容扩展的单元格高度,请执行以下操作:

Storyboard 中的

  • 将标签行设置为0
  • 将标签字体设置为系统
  • 为单元格
  • 中的标签设置约束
  • 添加self.tableView.rowHeight = UITableViewAutomaticDimension
  • 不要覆盖heightForRowAtIndex方法

  • 需要最少的代码:
    class MyTableViewController: UITableViewController {
    
        var entries:Array<String> = [String]()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //create dummy content
            var i = 0
            while i < 10 {
                entries.append("\(i) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor")
                entries.append("\(i+1) Lorem ipsum dolor sit amet")
                i = i + 2;
            }
    
            self.tableView.rowHeight = UITableViewAutomaticDimension
    
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int)  -> Int {
            return self.entries.count
        }
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
            let cell = self.tableView.dequeueReusableCellWithIdentifier("basic_cell", forIndexPath: indexPath) as UITableViewCell
    
            var label = cell.viewWithTag(13)
    
            if let unwrappedLabel = label as? UILabel {
                unwrappedLabel.text = self.entries[indexPath.row]
            }
    
            return cell
        }
    }
    

    左图显示了以上代码的结果。单元格高度随标签的内容而增加,这一切都很好。但是,当您单击详细信息 View 的公开指示器并再次移回时,您将获得正确的图像。为什么会这样?

    解决此问题的一个不好的方法是重写以下方法:
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        self.tableView.reloadData()
    }
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.tableView.reloadData()
    }
    
    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        self.tableView.reloadData()
    }
    

    这样就解决了上面的问题,但是这个解决方案似乎不对吗?它的副作用是,当调用self.tableView.reloadData()时,表 View 端口会跳到看起来不太好的第一个单元格。

    有人知道我在做什么错吗?随时克隆我的repo https://github.com/ArtworkAD/DynamicCellTest并进行测试。

    最佳答案

    添加此内容似乎可以解决旋转问题。

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        self.tableView.estimatedRowHeight = 36.5
    }
    

    但是,我还有另一种情况,即单元格中有4个标签,这具有相同的旋转问题,添加这个标签还不够,我最终用重新加载可见单元格替换了self.tableView.estimatedRowHeight = 36.5

    关于ios - UITableView动态单元格高度在过渡或旋转时中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26774126/

    10-14 20:11
    查看更多