0

UITableView の外観に setBackgroundView を使用すると、奇妙な無限ループに直面することがありました。外観の初期化は次のとおりです。

UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"bg"]];
[[UITableView appearance] setBackgroundView:iv];

私はコントローラーを持っています:

@interface MyController : UITableViewController

init単純なログを記録するメソッドとviewWill*/viewDid*デリゲートのみを持ちます。他には何もありません。そのような場合、サブビューのレイアウトに関する無限のメッセージが表示されます:

2013-06-05 21:23:45.054 MyApp[16700:c07] init
2013-06-05 21:23:45.056 MyApp[16700:c07] viewDidLoad
2013-06-05 21:23:45.057 MyApp[16700:c07] viewWillAppear
2013-06-05 21:23:46.059 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:47.061 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:48.064 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:49.066 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:50.067 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:51.069 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:52.070 MyApp[16700:c07] viewWillLayoutSubviews

私がに切り替える場合:

@interface MyController : UIViewController

すべてがうまくいっています。

これは予想される動作ですか (UIAppearance を明確に理解していませんでした)、それとも壊れた機能ですか?

UPD : AppDelegate で初期化された外観。

UPD2 : エンドレス ループは、別のビュー コントローラーからプッシュされたテーブル ビュー コントローラーでのみ発生します。

4

2 に答える 2

0

Apple のドキュメントによると、UITableViewには background プロパティがあります。

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundImage.png"]];

少し複雑ではありますが、画像を UITableView の背景として設定することは可能です。次の 4 つの手順があります。

1) tableView の backgroundColor プロパティを clearColor に設定して、背景画像が表示されるようにします。

[myTableView setBackgroundColor:[UIColor clearColor]];

2) UIImageView のインスタンスを作成し、そのイメージ プロパティを、テーブルの背後に表示するイメージに設定します。

UIImageView *tableBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage"]];

3) UIImageView のフレーム プロパティを、tableView のサイズと同じサイズになるように設定します。

[tableBackgroundView setFrame: myTableView.frame];

4) tableView の backgroundImage プロパティを更新して、新しい UIImageView オブジェクトを指すようにします。

[myTableView setBackgroundView:tableBackgroundView];
于 2013-06-05T21:14:18.800 に答える
0

この回答 によると、UITableViewを使用した外観のカスタマイズはサポートされていませんsetBackgroundView。したがって、これはバグではなく、まだサポートされていないだけです。

于 2013-06-05T20:28:00.807 に答える