- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UITableViewController
的自定义子类。它有一个包含许多行的部分。每行对应于相同的自定义表格 View 单元格类。每个自定义单元格都有两个标签:myLabel1
和 myLabel2
,它们都是单元格的 contentView
的 subview 。
每个 myLabel1
都有一行文本,每个 myLabel2
都有一两行文本,但是每个单元格应该有相同的高度,就好像每个 >myLabel2
有两行文本。
标签使用动态类型。
myLabel1.font = UIFont.preferredFont(forTextStyle: .headline)
myLabel2.font = UIFont.preferredFont(forTextStyle: .subheadline)
根据 Working with Self-Sizing Table View Cells ,我用自动布局定位了每个标签,并“将 TableView 的 rowHeight
属性设置为 UITableViewAutomaticDimension
”,以便行高随动态类型变化。
如何让每个单元格具有相同的高度?
我应该如何估计表格 View 的行高?
最佳答案
UITableViewAutomaticDimension
将根据单元格内容大小估计单元格大小。我们必须计算一个单元格可能具有的最大高度,并为所有单元格返回此高度,而不是使用 UITableViewAutomaticDimension
。
CustomTableViewCell
let kMargin: CGFloat = 8.0
class CustomTableViewCell: UITableViewCell {
@IBOutlet var singleLineLabel: UILabel!
@IBOutlet var doubleLineLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
updateFonts()
}
override func prepareForReuse() {
updateFonts()
}
func updateFonts() {
singleLineLabel.font = UIFont.preferredFont(forTextStyle:.title3)
doubleLineLabel.font = UIFont.preferredFont(forTextStyle:.body)
}
func updateCellForCellWidth(_ width:CGFloat) {
doubleLineLabel.preferredMaxLayoutWidth = width - (2*kMargin)
}
func fillCellWith(_ firstString: String, _ secondString: String) {
singleLineLabel.text = firstString
doubleLineLabel.text = secondString
}
}
设置虚拟单元格并列出动态类型的通知
var heightCalculatorDummyCell: CustomTableViewCell!
var maxHeight: CGFloat = 0.0
override func viewDidLoad() {
super.viewDidLoad()
heightCalculatorDummyCell = tableView.dequeueReusableCell(withIdentifier: "cell_id") as! CustomTableViewCell
maxHeight = getMaxHeight()
NotificationCenter.default.addObserver(self, selector: #selector(AutomaticHeightTableViewController.didChangePreferredContentSize), name: .UIContentSizeCategoryDidChange, object:nil)
}
使用虚拟单元格获取最大高度。
func getMaxHeight() -> CGFloat {
heightCalculatorDummyCell.updateFonts()
heightCalculatorDummyCell.fillCellWith("Title","A string that needs more than two lines. A string that needs more than two lines. A string that needs more than two lines. A string that needs more than two lines. A string that needs more than two lines.")
heightCalculatorDummyCell.updateCellForCellWidth(tableView.frame.size.width)
let size = heightCalculatorDummyCell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
return (size.height + 1)
}
根据通知处理表格 View 重新加载
deinit {
NotificationCenter.default.removeObserver(self)
}
func didChangePreferredContentSize() {
maxHeight = getMaxHeight()
tableView.reloadData()
}
最后一步,在 tableview delegate 中返回最大高度
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return titles.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return maxHeight
}
关于ios - 如何计算动态类型的 estimatedRowHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41356282/
在设置您的 UITableView 用于自动调整单元格大小时,您必须指定 estimatedRowHeight。为什么甚至需要这样做 - 鉴于系统会在显示单元格之前首先计算单元格高度? 最佳答案 将行
我有一个 UITableViewController 的自定义子类。它有一个包含许多行的部分。每行对应于相同的自定义表格 View 单元格类。每个自定义单元格都有两个标签:myLabel1 和 myL
当通过 UITableViewAutomaticDimension 使用动态 UITableViewCells 高度计算时,您必须设置 estimatedRowHeight。是否有任何关于错误估计值如
我正在使用新的 iOS 8 API: self.tableView.estimatedRowHeight = 60 self.tableView.rowHeight = UITableViewAuto
我在 StoryBoard 中为我的 tableViewCell 使用 autoLayout,因为我想根据文本为行设置可变高度。 现在在 viewDidLoad 中 我正在使用这些代码行 self.t
一些背景:我有一个嵌套的 tableView,其中我可以有不同类型的单元格,从 map 到图像再到键值对等等,所以我不得不使用嵌套的 tableView,这很难通过节行结合来实现 我正在使用自动调整大
每当用户创建新评论或用户刷新 UITableView 时,我都会尝试滚动到 UITableView (commentsFeed) 的底部。 我使用的代码是: func scrollToBottomOf
简单问题:我有一个 UITableViewController,一般设置工作正常。我只是想微调间距。 在UITableViewController的viewDidLoad中我调用: tableView
我有一个 UITableView 包含 UITableViewCell 包含一个 UITextView。 我想要两件事: 用户可以在 UITextView 中输入文本,它的尺寸会随之增长。 当用户点击
我有一个带有设置的表格 View : self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimate
我在 xib 中为我的 customCell 使用 autoLayout,因为我想根据文本为行设置可变高度。 现在在我的 VC.m 中 我正在使用这些代码行 - (void)viewdidLoad {
我正在尝试为我的 Collection View 制作可自行调整大小的单元格。我将显示文本部分,并且这些文本部分有很多大小,因为每个单元格都有一个段落。阅读有关 appcoda 和 useyourlo
我有一个 TableViewController,它包含 2 个 ImageView,一些 UILabel。我这样设置包含: 一切似乎都很好。对于最后一个 UILabel,我想根据内容的长度显示所有内
当使用 moveRowAtIndexPath:toIndexPath: 移动 UITableViewCell 时,我在使用 estimatedRowHeight 和 UITableViewAutoma
我是一名优秀的程序员,十分优秀!