我正在尝试使用动画扩展UITextView,当用户点击下面阅读更多按钮时.
@H_403_29@解决方法
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(),这有效,但有时也有副作用.
你为什么不用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