IOS 6.0とXcode 4.5GMでアプリをテストしたところ、次のようなビューが設定されました。
[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]];
したがって、ビューのパターンは一般的なテーブルビューと同じです。
これはiOS 4および5では問題なく機能しますが、iOS 6では背景が白くなります。
これは非推奨ですか?もしそうなら、どうすればそれを交換できますか?
ありがとう
このメソッドは6.0シードプログラムでは廃止される予定です。独自のビューにテーブルビューの背景のような背景を作成する場合は、空のテーブルビューを作成してコンテンツの背後に配置する必要があります。
まず、これをviewDidLoadに追加します。
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
OR
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
次に、この画像をアプリに追加します。
UIColor
を置き換えるgroupTableViewBackgroundColor
カテゴリを作成しました:
@interface UIColor (UITableViewBackground)
+ (UIColor *)groupTableViewBackgroundColor;
@end
@implementation UIColor (UITableViewBackground)
+ (UIColor *)groupTableViewBackgroundColor
{
__strong static UIImage* tableViewBackgroundImage = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(7.f, 1.f), NO, 0.0);
CGContextRef c = UIGraphicsGetCurrentContext();
[[self colorWithRed:185/255.f green:192/255.f blue:202/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(0, 0, 4, 1));
[[self colorWithRed:185/255.f green:193/255.f blue:200/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(4, 0, 1, 1));
[[self colorWithRed:192/255.f green:200/255.f blue:207/255.f alpha:1.f] setFill];
CGContextFillRect(c, CGRectMake(5, 0, 2, 1));
tableViewBackgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});
return [self colorWithPatternImage:tableViewBackgroundImage];
}
@end
このソリューションでは、背景の外観を微調整することもできます。描画コードを自由に変更してください:)
IOS6 SKDでは、UIInterface.hのコメントは次のことを示唆しています。
グループスタイルのテーブルビューの背景を単純な色で表すことができなくなりました。テーブルビューの背景に似た独自のビューの背景を作成する場合は、空のテーブルビューを作成してコンテンツの背後に配置する必要があります。
このメソッドは、6.0シードプログラムで廃止される予定です。
簡単な解決策は、背景を同等のRGB値で設定することです。
[self.view setBackgroundColor:[UIColor colorWithRed:215.0/255.0 green:217.0/255.0 blue:223.0/255.0 alpha:1.0]];
警告を抑制するために、ビューの背景を白またはxibで好きな色に設定できます。
それが誰かを助けるなら、これは具体的に私がこの背景を得るために私のカスタムビューでやっていることです(ベロユール氏からのヒントを使用して)
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor clearColor];
UITableView *tv = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
[self.view addSubview:tv];
[self.view sendSubviewToBack:tv];
// ...
}
これを試して:
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
ストーリーボードを使用していて、ビューが多い場合は、ビューを見つけるのが難しい場合があります。右上隅にある[バージョンエディタを表示]ボタンをクリックできます。これにより、ストーリービューがXMLテキストビューに変更されます。 「groupTableViewBackGroundColor」を検索します。この属性を持つビューを見つける必要があります。
@NSElvisのソリューションについて詳しく説明すると、これは同じグループ化されたテーブルビューのバックグラウンドアセットです(横方向で面白い効果が得られないように十分に広い)
それを使用するには、単に
[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];
以前のiOバージョンには標準の方法を使用することをお勧めします。だから私はジェームス・バウチャーの解決策を改善しました:
+ (void)setBackgroundColorForTableView:(UITableView*) tableView
{
UIColor* color = [UIColor whiteColor];
NSString* version = [[UIDevice currentDevice] systemVersion];
if([version floatValue] < 6.0)
{
tableView.backgroundColor = color;
}
else
{
tableView.backgroundView = nil;
UIView* bv = [[UIView alloc] init];
bv.backgroundColor = color;
tableView.backgroundView = bv;
[bv release];
}
}