自动调整 uitableviewcell 的大小 - SWIFT

Posted

技术标签:

【中文标题】自动调整 uitableviewcell 的大小 - SWIFT【英文标题】:Auto-sizing a uitableviewcell - SWIFT 【发布时间】:2015-05-05 12:27:04 【问题描述】:

我正在尝试根据可以是一行或多行的 UILabel 的大小来调整 tableviewcell 的大小。我需要为应用程序的其余部分打开自动布局,所以我不想关闭它来让它工作。目标是 ios 7 和 iOS 8。

我尝试了几种解决方案,但由于某种原因,我似乎无法获得正确的标签高度来自动调整或调整单元格高度。

这个方法出现了问题:calculateHeightForConfiguredSizingCell。我在 Git 上放了一个示例项目,所以你可以看到我所看到的。

https://github.com/mdaymond/cellResizer

本例基于这篇文章:http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout

更新 我签入了代码的更新。它几乎按照我想要的方式工作并以编程方式计算,但由于某种原因,标签高度的尺寸不太正确 - 它没有达到所需的全部高度。原始代码的问题是标签需要明确的宽度。

【问题讨论】:

你到底有什么问题?您无需关闭自动布局。您可以决定不在一个地方使用它。您甚至可以在同一个视图中使用手动布局和自动布局。 您的目标是不是 iOS 8.0?因为如果不是,您可以简单地在情节提要中设置约束,而不必手动计算任何东西! @dasdom - 问题是标签没有调整大小,单元格高度也没有。目标构建是 iOS 7 和 8 @AndreSlotta - 是的。我希望。 iOS 7 和 iOS 8 - 也澄清了我的问题.. 谢谢。 【参考方案1】:

我们开始吧,如果你支持 IOS 7,那么你需要在你的类中实现 UITableViewDelegate 协议,然后覆盖:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 


有关基于标签文本长度的动态自定义 UITableViewCell 高度的更多信息(查看此内容),您可以将代码放在 heightForRowAtIndexPath 函数中: height based on label text length

也覆盖:

 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
       // example to return the estimated height 
        return 280
    

注意:支持 IOS 7 需要手动处理。没有比 IOS 8 更简单的方法了。

但如果你只支持 IOS 8 及更高版本,那么你可以简单地在以下两行中做到这一点:

self.tableView.estimatedRowHeight = 280
self.tableView.rowHeight = UITableViewAutomaticDimension

【讨论】:

在我提供的示例代码中,您可能会看到我实现了这两个方法和委托。打算试试你现在引用的链接,看看它是否能引导我到任何地方。 对不起,但这并不能解决实际问题 链接的文章链接了我上面引用的同一篇文章。感谢您的尝试! @mday ,正如你所知,过去几个月我一直在尝试根据 UILabel 高度修复单元格。通过选择以编程方式修复它,您应该按照我所说的那样做,这就足够了,它对我很有用。请记住,IOS7 意味着处理这样的事情很痛苦。【参考方案2】:

实际上我已经下载了您的源代码并进行了以下更改。 UILabel 现在支持 multiline

第 1 步: 删除了以编程方式计算行高。这意味着在您的演示中评论了heightForRowAtIndexPath

第 2 步:在您的 UITableViewCell 中对 UILabel 设置以下布局约束。

第 3 步:在您的 xib 中将行数设置为 0

输出:

【讨论】:

这可能会奏效。现在尝试确认。但是,我需要以编程方式计算高度,因为我的单元格会变得更加复杂...... 我签入了对代码的更新。它几乎按照我想要的方式工作并以编程方式计算,但由于某种原因,单元格高度的大小不太正确。原始代码的问题是标签需要明确的宽度。 @mday 即使您的单元格过于复杂,即使您无需编程即可使用自动布局进行管理。 calculateHeightForConfiguredSizingCell 中,您可能需要先调用preferredMaxLayoutWidth,然后再调用标签上的setNeedsDisplay,然后再计算单元格大小。【参考方案3】:

这是我的代码。

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat

     self.scoutPropertyTable.rowHeight = UITableViewAutomaticDimension + 35
    return self.scoutPropertyTable.rowHeight

【讨论】:

以上是关于自动调整 uitableviewcell 的大小 - SWIFT的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UITableView 行高自动调整为 UITableViewCell 的大小?

自动调整 UITableViewCell 大小:无法同时满足约束

自动调整子类 UITableViewCell 子视图的大小

在 UITableViewCell 中自动调整 UILabel 的大小

让 UITableViewCell 使用自动布局调整自身大小

字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?