UILabel从具有动态类型的静态UITableViewCell中消失

Bor*_* Y. 14 xcode accessibility objective-c uitableview ios

我有UITableView基本样式单元格的静态,默认44高度.每个单元格中都有一个带有Body文本样式的标签.这样我就可以免费获得动态类型行为.

它的工作原理除外:

  1. 打开应用
  2. 打开表格视图
  3. 打开设置更改文本大小(更大的更小)
  4. 再次打开应用程序,标签消失.
  5. 转到另一个视图(返回)并再次打开故障表 - 文本已更改并且看起来很好

我设法通过跟随黑客来解决这个问题

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(preferredContentSizeChanged)
                                                 name:UIContentSizeCategoryDidChangeNotification object:nil];
}

- (void)preferredContentSizeChanged
{
    // adjust the layout of the cells
    // for some reason text from labels are disappear
    self.statusBarCell.textLabel.text = @"Status bar";
    self.itemColorCell.textLabel.text = @"Color";
Run Code Online (Sandbox Code Playgroud)

但我有另一个完全相同UITableView,这是行不通的.我试过细胞和标签的出口.我试过reloadDatasetNeedsLayout方法.

这是照片.标签为黄色,内容视图为蓝色:

之前,细胞有内容 之后,细胞没有标签

msc*_*idt 5

我最近玩静态表并试图添加动态类型.我得到了与你相同的结果 - 甚至可以在Apple自己的Contacts.app中看到这个消失的标签.

即使在将我的表从静态更改为动态并实现包含UILabel的小型自定义单元格(在XIB中配置为字体为UIFontTextStyleBody)之后,在更改系统首选项中的首选文本大小时,该表似乎仍未更新其内容.

但是:我在执行以下操作后意外得到了一些结果:在我的自定义单元格的子类中,我实现了prepareForReuse并将标签的字体重新初始化为正确的样式:

- (void)prepareForReuse {

    self.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
}
Run Code Online (Sandbox Code Playgroud)

随着我的表格上方的黑客攻击,他们的字体动态地适应系统偏好的变化.

希望有所帮助.


Tho*_*elt 2

我有同样的问题,想在没有代码的情况下解决这个问题。所以我改变了

  • 从基本到自定义的静态单元类型,
  • 添加了我自己的标签
  • 添加了前导、尾随和垂直中心约束,
  • 将标签上的动态类型复选框设置为打开
  • 以及标签的字体到文本样式正文。-

这甚至适用于没有程序代码/类的表视图