在iOS App Store中,有一个用于描述应用的单元格。如果文本太长,则单元格有蓝色"更多"按钮,用于扩展单元格以适合整个文本。 " What's New"有相同的功能。详细介绍最新更新的信息。我试过用一些问题来实现这个。
注意:我在故事板中使用AutoLayout。
我有一个UITableViewController子类和一个UITableViewCell子类。
import UIKit
class SystemDetailDescriptionTableViewCell: UITableViewCell {
static let defaultHeight: CGFloat = 44
@IBOutlet weak var descriptionTextView: UITextView!
}
在顶部,底部,左侧和右侧,说明文本视图在AutoLayout中设置为0。
接下来,我们有一个UITableViewController子类。我的第一个想法是使用heightForRowAtIndexPath方法。
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.section == 0 {
if self.didExpandDescriptionCell {
if let cell = tableView.dequeueReusableCellWithIdentifier(StoryboardPrototypeCellIdentifiers.descriptionCell) as? SystemDetailDescriptionTableViewCell {
return cell.descriptionTextView.contentSize.height
}
}
return SystemDetailDescriptionTableViewCell.defaultHeight
}
return tableView.rowHeight
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 0 {
self.didExpandDescriptionCell = true
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
} else {
if let link = self.links?[indexPath.row] {
self.performSegueWithIdentifier(StoryboardSegueIdentifiers.toVideoView, sender: link)
}
}
}
问题是contentSize没有正确调整文本的全长。相反,它大约是文本的3/4。我听说这个方法不适用于AutoLayout,而是需要使用LayoutManager完成一些技巧,但这些方法返回了完全相同的结果。
有人可以告诉我为什么这不能按预期工作吗?
答案 0 :(得分:0)
你需要告诉文本视图你应该试着说:
let newSize = cell.descriptionTextView.sizeThatFits(CGSize(width: cell.descriptionTextView.bounds.size.width, height: CGFloat.max))
cell.descriptionTextViewHeightConstraint.constant = newSize.height
return newSize.height
您需要获取内容的适当高度,然后将约束更新为新的高度(如果您已设置高度约束),然后更新单元格高度。此代码假定该单元格中只有descriptionTextView,并且它需要零填充。