iOS 8 UITableView第一行的高度错误

iOS 8 UITableView第一行的高度错误,第1张

概述我正在开发一个应用程序,我面临一个奇怪的问题.我在故事板中创建了一个UITableViewController,并添加了一个原型单元格.在这个单元格中,我添加了一个UILabel元素,这个UILabel占据了整个单元格.我已经使用自动布局进行了设置,并添加了左,右,顶部和底部约束. UILabel包含一些文本. 现在在我的代码中,我初始化表视图的rowHeight和estimatedRowHeig 我正在开发一个应用程序,我面临一个奇怪的问题.我在故事板中创建了一个UItableVIEwController,并添加了一个原型单元格.在这个单元格中,我添加了一个UILabel元素,这个UILabel占据了整个单元格.我已经使用自动布局进行了设置,并添加了左,右,顶部和底部约束. UILabel包含一些文本.

现在在我的代码中,我初始化表视图的rowHeight和estimatedRowHeight:

overrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    self.tableVIEw.rowHeight = UItableVIEwautomaticDimension    self.tableVIEw.estimatedRowHeight = 50}

我按如下方式创建单元格:

overrIDe func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell {    var cell : UItableVIEwCell? = tableVIEw.dequeueReusableCellWithIDentifIEr("HelpCell") as? UItableVIEwCell    if(cell == nil) {        cell = UItableVIEwCell(style: .Default,reuseIDentifIEr: "HelpCell")    }    return cell!}

我在表视图中返回两行.这就是我的问题:第一行的高度是大的.似乎第二排,第三排等都具有正确的高度.我真的不明白为什么会这样.有人可以帮我弄这个吗?

解决方法 我有一个问题,在第一次加载时细胞的高度不正确,但在向上和向下滚动后,细胞的高度是固定的.

我为这个问题尝试了所有不同的’修复’,然后最终发现在最初调用self.tableVIEw.reloadData之后调用这些函数.

self.tableVIEw.reloadData()            // BUG in 8.0+ where need to call the following three methods in order to get the tableVIEw to correctly size the tableVIEwCells on the initial load.            self.tableVIEw.setNeedsLayout()            self.tableVIEw.layoutIfNeeded()            self.tableVIEw.reloadData()

只在初始加载后执行这些额外的布局调用.

我在这里找到了这个非常有用的信息:https://github.com/smileyborg/TableViewCellWithAutoLayoutiOS8/issues/10

更新:
有时您可能还需要在heightForRowAtIndexPath中完全配置单元格,然后返回计算的单元格高度.查看此链接以获取http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout的一个很好的示例,特别是有关heightForRowAtIndexPath的部分.

更新2:我还发现覆盖estimatedHeightForRowAtIndexPath并提供一些准确的行高估计非常有用.如果您的UItableVIEw具有可以是各种不同高度的单元格,这将非常有用.

这是estimatedHeightForRowAtIndexPath的一个人为的示例实现:

public overrIDe func tableVIEw(tableVIEw: UItableVIEw,estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGfloat {    let cell = tableVIEw.cellForRowAtIndexPath(indexPath) as! MyCell    switch cell.type {    case .Small:        return kSmallHeight    case .Medium:        return kMediumHeight    case .Large:        return kLargeHeight    default:        break    }    return UItableVIEwautomaticDimension}

更新3:UItableVIEwautomaticDimension已经针对iOS 9进行了修复(woo-hoo!).所以你的细胞应该自动调整大小,而不必手动计算细胞高度.

总结

以上是内存溢出为你收集整理的iOS 8 UITableView第一行的高度错误全部内容,希望文章能够帮你解决iOS 8 UITableView第一行的高度错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1102537.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存