如何告知所有自动布局约束自行更新? (例如,当用户更新其系统大小/动态类型时)?

时间:2013-11-07 00:12:46

标签: ios objective-c uitableview ios7

我正在iOS 7中为我的应用添加动态类型支持,现在当用户更改其系统字体大小然后退出并重新打开应用程序时,它会愉快地更新它。但是,当刚刚启动回到应用程序时,我似乎无法让它工作。

我添加了一位观察员:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contentSizeDidChange) name:UIContentSizeCategoryDidChangeNotification object:nil];

当用户更改其大小时,会调用以下方法:

- (void)contentSizeDidChange {
     [self.tableView invalidateIntrinsicContentSize];
     [self.tableView reloadData];
}

但是我的单元格中的类型大小根本没有变化(尽管单元格的高度确实如此)。这是因为我为我的单元格划分了UITableViewCell吗?

编辑:

这是我在UITableViewCell子类中的内容:

- (void)contentSizeDidChange {
    self.fullCellURLLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
    self.timeLeftLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
    self.timeLeftLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
    self.fullCellPreviewLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline];
}

1 个答案:

答案 0 :(得分:2)

我要在这里猜测(因为我没有这样做)你必须将每个文本对象上的文本重置为你想要的“首选”大小。当您使用该方法时,它返回一个静态UIFont - 字体本身不会在控件内“更新”。

使用静态视图和一些uitextfields进行此测试 - 谁知道系统将随着大小的增加更改字体?在优化真实应用之前,首先在演示项目中尝试。