2

テーブルビューにアイテムを表示する簡単なアプリに取り組んでいます。から通常の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インスタンスを再作成せずにキューを空にすることなく)、これを機能させる方法はありますか? このキューをプログラムで (そして合法的に) クリアする方法はありますか?

編集:誰かがこの問題に興味を持っている場合、これに対する私のドロップイン修正は、新しいテーブルビューを作成し、元のテーブルビュー(登録されたセルクラスを含む)から関連するすべてのプロパティをコピーしてから交換する一般的なユーティリティメソッドを書くことでした古いもののための新しいもの。これは新しいテーブルであるため、キューに入れられたセルのまったく新しいインスタンスが生成され、新しいテキスト サイズが組み込まれます。

4

3 に答える 3

1

これは、iOS 10 で処理されるようになりました。

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

ラベルに/を設定adjustsFontForContentSizeCategoryすると、テキスト サイズの設定が変更されたときに自動的にサイズが変更されます。YEStrue

于 2016-07-12T00:15:39.250 に答える
0

これに対する私のドロップイン修正は、新しいテーブルビューを作成し、元のテーブルビュー (登録済みのセル クラスを含む) から関連するすべてのプロパティをコピーし、新しいものを古いものと交換する一般的なユーティリティ メソッドを作成することでした。これは新しいテーブルであるため、キューに入れられたセルのまったく新しいインスタンスが生成され、新しいテキスト サイズが組み込まれます。

于 2015-09-18T20:21:30.197 に答える