【问题标题】:Auto-sizing a uitableviewcell - SWIFT自动调整 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 - 也澄清了我的问题.. 谢谢。

标签: ios uitableview swift autolayout


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多