在iOS 6上不推荐使用groupTableViewBackgroundColor吗?

时间:2012-09-17 03:25:02

标签: ios view background tableview ios6

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

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

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

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

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

由于

9 个答案:

答案 0 :(得分:31)

在6.0种子程序中,不推荐使用此方法 如果您想在自己的视图中拥有一个看起来像表视图背景的背景, 然后你应该创建一个空表视图并将它放在你的内容之后。

答案 1 :(得分:25)

首先,将其添加到 viewDidLoad

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

OR

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

然后将此图片添加到您的应用中:

<强> tableViewBackground.png

tableViewBackground.png

<强> tableViewBackground@2x.png

tableViewBackground@2x.png

答案 2 :(得分: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

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

答案 3 :(得分: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中的任何内容以禁止显示警告。

答案 4 :(得分: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];
    // ...
}

答案 5 :(得分:2)

试试这个:

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

答案 6 :(得分:1)

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

enter image description here

答案 7 :(得分:0)

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

+ (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];
    }
}

答案 8 :(得分:0)

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

back-tableview@2x.png

要使用它,只需执行

[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];