【问题标题】:How to make a self sizing basic UITableViewCell?如何制作一个自定尺寸的基本 UITableViewCell?
【发布时间】:2016-08-15 23:56:24
【问题描述】:

我知道如何制作自定义大小的单元格。但由于某种原因,我在尝试将默认设置设为多行时遇到了挑战。

我目前想要的是一个只有一个标签的单元格。因此,具有内置样式“Basic”的默认样式似乎是解决如此简单问题的最佳解决方案。但是它只显示 2 行文本。

我当前的设置:一个静态的UITableView 和一个UITableViewController,其中包含一些需要配置的单元的插座。

我尝试过的事情:

  • 将行数设置为 0
  • 将表格视图的行高设置为UITableViewAutomaticDimension
  • 覆盖heightForRowAtIndexPath,使其始终返回UITableViewAutomaticDimension
  • 在单元格和/或内容视图和/或文本标签上调用sizeToFitsetNeedsLayoutlayoutIfNeeded
  • 在故事板中将自定义单元格高度设置为 0
  • 增加标签的垂直和水平内容拥抱优先级

编辑:

我想我并不清楚到底是什么问题。我没有使用自定义单元格。我正在尝试摆脱基本的。

这意味着您不能向其标签添加任何约束。当然,您可以通过编程方式进行,但由于 Apple 内置样式的所有内容都在内部进行管理,因此可能会导致冲突。

其他细节:

此时(如上所述)我有一个 UITableViewController 与特定单元格的出口:@IBOutlet weak var descriptionCell: UITableViewCell!

override func viewDidLoad() {
  super.viewDidLoad()
  tableView.rowHeight = UITableViewAutomaticDimension
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
  return UITableViewAutomaticDimension
}

真的有可能吗?因为我已经花了太多时间试图避免制作自定义单元格,所以我最终会去做。无论如何,欢迎任何解决方案。

【问题讨论】:

  • Stack Overflow 不适合放置教程。我建议您编辑您的问题以显示您的 tableview 控制器代码、带有约束的单元格的图像,并准确列出问题所在和不工作的地方。就目前而言,您的问题太宽泛了。
  • 按照以下步骤操作:- programmingcrew.in/2015/09/…
  • @RoboticCat 好的,我编辑了原始帖子,但涉及的代码仍然不多。我以为我可以摆脱一个基本的细胞,但事实证明我做不到。

标签: ios swift uitableview autolayout


【解决方案1】:

下面两个就不用了。

  • 在单元格和/或内容视图和/或文本标签上调用 sizeToFit、setNeedsLayout、layoutIfNeeded
  • 在故事板中将自定义单元格高度设置为 0

你应该检查你标签的约束。例如,它应该在运行时具有固定的宽度,并且对单元格的顶部和底部有约束。所以细胞会自己生长。

【讨论】:

  • 这肯定有效,除非您使用具有内置样式的单元格(在我的例子中为“基本”)。我用额外的细节编辑了我的原始帖子。
【解决方案2】:

试试这个方法:

  1. 将行数设置为 0
  2. 将表格视图的行高设置为UITableViewAutomaticDimension
  3. 覆盖heightForRowAtIndexPath,使其始终返回UITableViewAutomaticDimension
  4. NsLayConstraints 为标签:

    top = cell.top
    bottom = cell.bottom
    leading = cell.leading.padding 
    trailing = cell.leading.padding   (Padding is optional)
    

【讨论】:

  • 但是在使用内置单元格样式(在我的例子中为“基本”)时,确实没有向标签添加约束的好方法。我用额外的细节编辑了我的原始帖子。
  • 如果没有 UITableViewAutomaticDimension 和估计的 height 属性,您将无法实现。据我所知,没有办法做到这一点。你不能只传递约束。
【解决方案3】:

它对我有用。您需要在代码中做的就是

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.estimatedRowHeight = 44.0 // or whatever height is closest to what your cells will be
    tableView.rowHeight = UITableViewAutomaticDimension
}

您在“将表格视图的行高设置为 UITableViewAutomaticDimension”之后列出的所有内容都不是必需的。只需像您一样将单元格标签中的行数设置为 0 并包含上面的代码。

【讨论】:

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