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 失去对 tableview 的引用
使用 UITableViewController 时如何尽量减少重复自己