Xcode 6ベータ6、外観プロキシですべてのUITableViewの背景色を変更しようとしています:
[[UITableView appearance] setBackgroundColor:[UIColor redColor]]
しかし、それは動作しないようです。
再現する手順:
1シングルビュープロジェクトを作成する
2 storyboardのViewControllerにUITableViewを追加します
3デリゲートを設定してコントローラーを表示し、IBの背景を変更します。
4動的セルを追加し、データソースを構成します。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell1Identifier" forIndexPath:indexPath];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 60.f;
}
5アプリデリゲート:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[UITableView appearance] setBackgroundColor:[UIColor redColor]];
return YES;
}
6アプリを実行して、正しくない色を見る:
それを修正する方法の提案はありますか?すべてのテーブルの背景色を設定することは良い解決策のようには見えません。
interfaceBuilderでBackgroundColorを「デフォルト」に「リセット」しようとします(すでにデフォルトの場合でも、少し色が変化します)。
これはグループ化されたスタイルのテーブルビューでは機能しません
更新:
これは私のために働いた
[[UIScrollView appearance] setBackgroundColor:[UIColor redColor]];
XCode 6のタブレットでUITableViewCellのクリアカラーが機能しない。次の回避策で解決します。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [UIColor redColor];
}
IOS 8の場合、少なくとも私たちの状況では、ビューの背景色をそのビューのテーブルに設定するとき、explicitlyテーブルとセルの背景色をClearに設定して、ビューから表示する目的の色。以前のiOSバージョンでは、セルはデフォルトで透明に設定されていたと思いますが、もはやそうではないようです。
[UITableVIew backgroundColor]はUI_APPEARANCE_SELECTORでマークされていません。外観プロキシは、セレクターがUI_APPEARANCE_SELECTORでマークされている場合にのみ機能します。
TableView:willDisplayCell:forRowAtIndexPathでセルの背景色を透明に設定します。
IOS 8.0.xでは、外観プロキシが一見すると報告されていないバグを示しているようです。テーブルセルのデフォルトの背景色を含むiOS 7の変更とは無関係です。
比較的良いニュースは、これはiOS 8.0と8.0.2の間の問題にすぎないように見えることです。
ほとんどのユーザーがアップグレードするまでは、オブジェクト自体に明示的に背景を設定して、登場前の時代に戻す必要があります:(