- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试根据内容制作具有动态单元格高度的 UITableView。我的应用程序是一个文章查看器。我尝试使用这些函数计算单元格的高度。
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = .ByTruncatingTail
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let post = FeedController.sharedController.allPosts[indexPath.row]
var height = 16.0
if post.hasImage {
height += Double(self.view.frame.width) / (4/3)
}
let titleH = heightForView(post.title!, font: UIFont(name: "LiberationSerif-Bold", size: 20.0)!, width: self.tableView.bounds.width)
let descH = heightForView(post.desc!, font: UIFont(name: "LiberationSerif", size: 17.0)!, width: self.tableView.bounds.width)
let totalHeight = CGFloat(height+Double(titleH)+Double(descH))
print("imageH: \(height), titleH: \(titleH) detailH: \(descH) totalH:\(totalHeight)")
return totalHeight
}
当我运行它时,它看起来像这样,如您所见,底部标签被切掉了。
我通过接口(interface)断点运行它,你可以在其中看到错误的原因:
呈现的尺寸比 sizeToFit() 的估计尺寸大一个尺寸,正如您从我的日志语句中看到的那样:
imageH: 297.25, titleH: 44.5 detailH: 56.5 totalH:398.25
我怀疑这个计算错误的原因是我为 heightForView 函数提供了错误的宽度参数。我尝试过使用 tableView.contentSize 和许多其他东西。 lineBreakMode 在我的 Storyboard和我的代码中是相同的。
我想我需要的是一种更好的方法来找到单元格的预期宽度,或者任何其他可以给我正确预期高度的解决方案。
最佳答案
使用更少的代码 (*),您可以完全放弃 heightForRowAtIndexPath
,并为所有内容使用 autolayout
。
heightForRowAtIndexPath
(所有代码都会消失)viewDidLoad
中): self.tableView.estimatedRowHeight = 88
self.tableView.rowHeight = UITableViewAutomaticDimension
(*) 2 行 代码,准确地说。通过比较说服自己 2 lines solution反对multiple methods override solution .
边距说明
XIB
& storyboard
:您有能力控制约束及其与边距的关系。
请注意,当使用Relative to margin 时,项目顺序很重要,因为边距通常是插入的。参见 https://stackoverflow.com/a/25420909/218152了解一些细节。
storyboard
:您可以从 IB 访问额外的 topLayoutGuide
和 bottomLayoutGuide
属性,这可能对您的 View Controller 有值(value),但对您的 UITableViewCell
来说是题外话。
关于ios - sizeToFit() 返回错误的高度 - 需要在 heightForRow 中找到单元格宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731721/
我需要对某些单元格使用 UITableViewAutomaticDimension,还需要对其他一些单元格使用 heightForRow 是否可以在同一个 TableView 中同时使用它们?如果可能
我创建了一个 viewController,它显示一个普通样式的 UITableView。有时我有足够的单元格来填充表格 View ,有时却没有。当我没有足够的单元格时,我想缩小表格 View ,以便
当您有很多单元格时, heightForRowAtIndexPath 是一项非常昂贵的操作。在我的例子中,我有数千个,所以我想我可以分批分解表格并一次只显示 50 个单元格,并且当用户接近表格 Vie
我正在尝试根据内容制作具有动态单元格高度的 UITableView。我的应用程序是一个文章查看器。我尝试使用这些函数计算单元格的高度。 func heightForView(text:String,
我有一个 UITableView,它有几个不同高度的单元格。每一行都根据其包含的内容进行动态调整。 我有一个自定义的 UITableViewCell,里面有一个 UICollectionView,它应
我只是在 UITableViewCell 上寻找 UIWebView 和 UILabel 的动态高度。 This is great example for UIWebView in UITableVi
最近我将我的 Xcode 从 v 5.1.1 更新到 6.0.1。在验证我当前的 Cocos2d v3.1 项目期间,iTunes 商店向我显示警告 iTunes Store operation fa
我是一名优秀的程序员,十分优秀!