在UITableViewCell中展开UITextView高度(读取更多效果)

时间:2017-10-12 07:43:44

标签: ios swift xcode uitableview animation

我正在尝试使用动画扩展UITextView,当用户点按下面的更多按钮时。

enter image description here

我尝试了很多方法并提出了几乎可行的解决方案:

func readMore() {
    self.tableView.beginUpdates()
    cell.descTextViewHeightConstraint.constant = cell.descTextView.expectedHeight()
    self.tableView.endUpdates()
}

的UITextView +高度

extension UITextView {
    func expectedHeight() -> CGFloat {
        let textView: UITextView = UITextView(frame: CGRect(x: 0, y: 0, width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude))
        textView.font = self.font
        textView.text = self.text
        textView.sizeToFit()
        return textView.frame.height
    }
}

这个解决方案有效,但有一个副作用 - 当动画结束时,UITableViewCell中的一些元素被隐藏(标题标签)。

我还试图在动画结束时调用tableView.reloadData(),这有效,但有时也有副作用。

3 个答案:

答案 0 :(得分:1)

为什么你不玩"玩"使用numberOfLines属性?

对于一个项目,我做了类似这样的事情(还有一个旋转的UIImage箭头......)。一切都在自定义单元类中:

func setExpanded(_ isExpanded: Bool) {
    if isExpanded {
        lblFullDescription.numberOfLines = 0
        UIView.animate(withDuration: Constants.NavigationBar.AnimationTime, animations: { [weak self] in
            self?.imgArrow.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi))
        })

    } else {
        lblFullDescription.numberOfLines = 2
        UIView.animate(withDuration: Constants.NavigationBar.AnimationTime, animations: { [weak self] in
            self?.imgArrow.transform = CGAffineTransform(rotationAngle: CGFloat(0))
        })
    }
}

并在包含UITableView的ViewController中添加它:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 42

答案 1 :(得分:0)

您可以在单元格上进行回调并更新它的约束

func updateTableViewUIfor(indexPath: IndexPath) {
    self.tableView.beginUpdates()
    theCell.updateToExpanded() //get the cell and update it's constraints
    self.tableView.setNeedsDisplay()
    self.tableView.endUpdates()
}

你使用

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//... return required height
}

答案 2 :(得分:0)

我在iOS 11和自我调整大小/可调整大小的单元格方面遇到了一些问题。我不知道eactyl对你来说有什么奇怪的行为,但在我的情况下,我确实将tableView estimatedRowHeight设置为大于我的最大单元格高度的值并解决了它。