UITableViewController 的基本(静态)单元格标签中的动态类型 - 可能吗?

Posted

技术标签:

【中文标题】UITableViewController 的基本(静态)单元格标签中的动态类型 - 可能吗?【英文标题】:Dynamic Type within Labels of Basic (Static) Cells of UITableViewController - is it possible? 【发布时间】:2016-11-07 14:25:58 【问题描述】:

问题是不言自明的,我可能遗漏了一些简单的东西。以下是在 Interface Builder 中完成的。

我创建了一个 UITableViewController,我将 Content 设置为 Static Cells 并将 Style 设置为 Grouped

我已经定义了部分的数量以及每个部分的行数。我已将每个单元格的样式设置为Basic

现在,在每个单元格中,我都有默认的内容视图和标签。对于标签,我将 Text 设置为 Plain,将 Font 设置为 Body,将 Lines 设置为 0。通常这允许我使用 UILabel 实现动态类型。

我将单元格连接为 IBOutlets 并以编程方式(仅)设置它们的文本。

当我运行应用程序时,一切都在那里,除了标签的字体(以及每个单元格的高度)没有改变(不是动态类型)。

因此,我的问题是,是否可以为 Basic(非 Custom)静态单元格中的标签实现动态类型,或者这些单元格是否意味着“原样”?


我在 SO 上看到的最接近的问题是 this,但它指的是 Custom Cells。

也尝试实现

override func viewDidLoad() 
    super.viewDidLoad()
    self.tableView.rowHeight = UITableViewAutomaticDimension


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

但无济于事。

【问题讨论】:

【参考方案1】:

动态类型确实适用于静态表,但在我的测试中,不适用于“基本”单元格类型。将其更改为“自定义”单元格类型,添加标签和四个约束,并确保选择其中一种动态字体(例如“标题 3”)。

如果您希望相应地调整单元格高度,请确保同时具有顶部和底部约束。正如您所发现的,您不能只将行高设置为UITableViewAutomaticDimension,而是必须实现该委托方法,例如在 Swift 3 中:

override func viewDidLoad() 
    super.viewDidLoad()

    tableView.estimatedRowHeight = 44


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return UITableViewAutomaticDimension

【讨论】:

谢谢罗伯。我猜那是“自定义”单元格。可惜考虑到默认单元格在很多情况下都满足要求。您将如何在附件视图中添加详细标签?添加另一个标签并使其变灰?不过,大小比例如何 - 它与主标签的字体相同吗? 我不确定您所说的“附件视图中的详细标签”是什么意思,因为通常您不会在附件中放置标签。但是,您可以将所需的任何标签添加到自定义单元格本身,将字体设置为任何UIFontTextStyle,以提供与您用于其他标签的任何UIFontTextStyle 的正确相对大小。 我没有很好地解释自己,我指的是样式为Right Detail 的单元格,它似乎在附件视图中包含一个(灰色)标签,或者至少与其位置重叠。由于这些单元格(就像Basic 单元格一样)不适合动态类型,我只是想知道“详细信息”标签应该使用什么动态字体来模仿Right Detail 单元格的原始样式。跨度> 您可能必须共享屏幕快照,因为当我使用“右细节”时,标题和细节都是相同的字体和颜色。但是,另一方面,当我使用“字幕”单元格时,细节会更小,接近“标题 3”的标题和“标题 1”的字幕(我只是目不转睛)。但是你在 IB 中改变了这一点,所以只需尝试其中的一些“文本样式”,你就会准确地看到它的样子。无需猜测。选择最适合您的应用的。 确实,我一定在不同的方面看到了太多次“正确的细节”,而事实上默认情况并非如此。你是男人,也是这里的传奇。

以上是关于UITableViewController 的基本(静态)单元格标签中的动态类型 - 可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法让 UITableViewController 动态填充

UITableViewController 应用程序崩溃

UITableviewController 失去对 tableview 的引用

使用 UITableViewController 时如何尽量减少重复自己

如果弹出框作为模型呈现,UITableViewController 将失去滚动功能

如何将选定的 UITableViewController 值添加到以前的 UITableViewController?