36

我只是在使用 iOS 6.0 和 Xcode 4.5GM 测试我的应用程序,我设置了这样的视图:

[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]];

因此,视图与普通表视图具有相同的模式。

这在 iOS 4 和 5 上运行良好,但在 iOS 6 中它只是给了我一个白色背景。

这是否已弃用?如果是这样,我该如何更换它?

谢谢

4

9 回答 9

31

这个方法将在 6.0 种子程序中被弃用 如果你想在你自己的视图中有一个看起来像 table view 背景的背景,那么你应该创建一个空的 table view 并将它放在你的内容后面。

于 2012-09-17T03:33:00.207 回答
25

首先,将此添加到您的viewDidLoad

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

或者

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];

然后将此图像添加到您的应用程序中:

tableViewBackground.png

tableViewBackground.png

tableViewBackground@2x.png

tableViewBackground@2x.png

于 2012-10-29T16:16:59.960 回答
18

我写了一个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

此解决方案还允许调整背景的外观。随意更改绘图代码:)

于 2012-10-01T10:47:30.753 回答
13

在 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 中将视图背景设置为白色或任何您喜欢的颜色以抑制警告。

于 2012-09-26T15:47:45.243 回答
6

如果它对任何人有帮助,这就是我在自定义视图中为获得此背景所做的具体操作(使用 Beloeuvre 先生的提示)

- (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];
    // ...
}
于 2013-01-13T14:19:39.707 回答
2

试试这个:

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
于 2012-10-03T08:04:17.787 回答
1

如果您使用故事板并且有很多视图,您可能很难找到视图。您可以单击右上角的“显示版本编辑器”按钮。这会将故事视图更改为 XML 文本视图。搜索“groupTableViewBackGroundColor”。您应该找到具有此属性的视图。

在此处输入图像描述

于 2013-02-03T22:28:30.047 回答
0

对以前的 iOs 版本使用标准方法是个好主意。所以我改进了 James Boucher 的解决方案:

+ (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];
    }
}
于 2013-02-02T16:46:45.013 回答
0

详细说明@NSElvis 的解决方案,这里是相同的分组表视图背景资源(它足够宽,因此您不会在横向上获得有趣的效果)

back-tableview@2x.png

要使用它,只需执行

[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];
于 2013-05-13T09:39:14.450 回答