テーブルビューにアイテムを表示する簡単なアプリに取り組んでいます。から通常のUITableViewCell
オブジェクトを返す場合tableView:cellForRowAtIndexPath
:
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 | General | Text Size
、スライダーの値を変更してアプリに戻ると、表示されているすべてのセルがすぐに更新され、新しいフォント サイズが使用されます。
ただし、UITableViewCell のカスタム サブクラスを返すUILabel
と、システム フォントの代わりにテキスト スタイルを使用するように設定された XIB が含まれている場合、ダイナミック テキストは正しく機能しません。のテーブルに 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];
アプリを初めて実行すると、表示されているセルは、ユーザーが選択した優先テキスト サイズと一致するテキスト サイズで表示されます。ただし、設定に移動してそのサイズを変更してからアプリに戻ると、表示されているすべてのセルが以前のテキスト サイズのままになります。上にスクロールすると、新しい (正しい) テキスト サイズを示す 2 つのセルが表示されますが、残りは古いサイズのままです。アプリを停止して再起動すると、すべてのセルが新しい (正しい) テキスト サイズで表示されます。
テーブルビューが以前のサイズのセルをキューに保持していて、ユーザーの好みのテキストサイズの変更に応じてフォントサイズを自動的に更新していないことは明らかです。しかし、キューに通常のサブクラス化されていないインスタンスが含まれている場合、テーブルビューがこの変更を自動的に行う理由がわかりませUITableViewCell
ん。アプリを再起動せずに (またはUITableView
インスタンスを再作成せずにキューを空にすることなく)、これを機能させる方法はありますか? このキューをプログラムで (そして合法的に) クリアする方法はありますか?
編集:誰かがこの問題に興味を持っている場合、これに対する私のドロップイン修正は、新しいテーブルビューを作成し、元のテーブルビュー(登録されたセルクラスを含む)から関連するすべてのプロパティをコピーしてから交換する一般的なユーティリティメソッドを書くことでした古いもののための新しいもの。これは新しいテーブルであるため、キューに入れられたセルのまったく新しいインスタンスが生成され、新しいテキスト サイズが組み込まれます。