gpt4 book ai didi

ios - 如何让自定义 UITableViewCell 获取用户对首选文本大小的更改?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:20 25 4
gpt4 key购买 nike

我正在开发一个简单的应用程序来在表格 View 中显示项目。如果我从 tableView:cellForRowAtIndexPath 返回一个普通的 UITableViewCell 对象:

static NSString *cellIdentifier = @"EmailCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];

if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"EmailCell"];
}

cell.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

...然后与动态文本的交互按预期工作;如果用户转到 Settings |一般 |文本大小,更改 slider 值然后返回到我的应用程序,所有可见单元格立即 self 更新以使用新的字体大小。

但是,如果我返回 UITableViewCell 的自定义子类,其中 XIB 包含设置为使用文本样式而不是系统字体的 UILabel,则动态文本无法正常工作.这是我用来将 XIB 分配给 viewDidLoad 中的表的代码:

[self.table registerNib:[UINib nibWithNibName:@"EmailCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"EmailCell"];

然后是 tableView:cellForRowAtIndexPath: 中的这段代码

static NSString *cellIdentifier = @"EmailCell";
EmailCell *cell = (EmailCell *)[tableView
dequeueReusableCellWithIdentifier:cellIdentifier];

当我第一次运行该应用程序时,可见单元格的文本大小与用户选择的首选文本大小相匹配。但是,如果我随后转到设置并更改该大小,然后返回到我的应用程序,则所有可见单元格都将保留以前的文本大小。如果我向上滚动,我会看到两个单元格显示新的(正确的)文本大小,但其余的仍然是旧大小。如果我停止并重新启动该应用程序,所有单元格现在都会显示新的(正确的)文本大小。

在我看来很明显,tableview 将先前大小的单元格保留在队列中,并且不会自动更新它们的字体大小以响应用户对首选文本大小的更改。但我不明白为什么当队列包含普通的非子类 UITableViewCell 实例时,tableview 确实 自动进行此更改。有什么方法可以让我在不重新启动应用程序的情况下工作(或者不重新创建 UITableView 实例,从而清空队列)?有没有办法以编程方式(合法地)清除此队列?

编辑:如果有人对这个问题感兴趣,我对此的直接修复是编写一个通用的实用方法来创建一个新的 tableview,从原始 tableview 复制所有相关属性(包括已注册的单元格类别),然后将新的替换为旧的。由于这是一个新表格,它会生成包含新文本大小的排队单元格的全新实例。

最佳答案

现在在 iOS 10 中已经为您处理了。

http://useyourloaf.com/blog/auto-adjusting-fonts-for-dynamic-type/

在您的标签上将 adjustsFontForContentSizeCategory 设置为 YES/true,它会在文本大小偏好更改时自动调整大小。

关于ios - 如何让自定义 UITableViewCell 获取用户对首选文本大小的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21173838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com