1

我有一个包含表格视图并显示自定义单元格的视图控制器。我正在尝试使用该traitCollectionDidChange方法(在单元格子类中)对内容大小类别的更改做出反应,但是当此特征发生更改时,永远不会为单元格调用此方法。另一方面,当尺寸类改变时它会被调用。

traitCollectionDidChange为视图控制器调用(当内容大小类别发生变化时),我可以手动将调用传播到可见单元格,但感觉像是额外的工作。为什么没有专门针对内容大小类别更改调用单元子类?

编辑推理我为什么要在单元格内调用:

当内容大小类别与可访问性相关联时,我想将单元格的标签更改为多行,否则保持单行。我在某些 iOS 应用程序中注意到了这种行为,例如 Apple Music。

4

1 回答 1

1

您的应用程序中任何需要了解内容大小类别更改的地方都可以注册UIContentSizeCategory.didChangeNotification.

https://developer.apple.com/documentation/uikit/uicontentsizecategory/1622948-didchangenotification

因此,无需将信息沿层次结构传播,只需为该通知设置一个适当的对象寄存器即可。例如,也许您有(或可能有)一个合适的自定义表格视图单元子类。


至于您实际提出的问题,我所能做的就是提供一个理论。Apple 将 UILabel 之类的东西配置UIContentSizeCategory.didChangeNotification在表格视图单元格中时接收。这涉及幕后的一些手帕。我怀疑作为这个手帕的一部分,他们故意阻止单元格本身接收traitCollectionDidChange内容大小类别的变化,因为相同的信号已经以不同的方式到达,他们不想用太多的内容轰炸单元格内容事件。

于 2022-01-04T14:44:51.187 回答