在 iOS 6 上不推荐使用 groupTableViewBackgroundColor 吗?
Posted
技术标签:
【中文标题】在 iOS 6 上不推荐使用 groupTableViewBackgroundColor 吗?【英文标题】:is groupTableViewBackgroundColor deprecated on iOS 6? 【发布时间】:2012-09-09 06:55:39 【问题描述】:我刚刚使用 ios 6.0 和 Xcode 4.5GM 测试我的应用程序,我设置了这样的视图:
[self.view setBackgroundColor:[UIColor groupTableViewBackgroundColor]];
因此,视图与普通表格视图具有相同的模式。
这在 iOS 4 和 5 上运行良好,但在 iOS 6 中它只是给我一个白色背景。
这是否已弃用?如果可以,如何更换?
谢谢
【问题讨论】:
【参考方案1】:此方法将在 6.0 种子程序中被弃用 如果你想在你自己的视图中有一个看起来像表格视图背景的背景, 那么你应该创建一个空的表格视图并将其放在你的内容后面。
【讨论】:
好主意,空表视图! 有点丑陋的建议哈哈,你应该让设计师制作背景图像会是一个更好的解决方案。由于已弃用的提示,无论如何都要投票。 很奇怪,文档没有提到它已被弃用(但确实如此)【参考方案2】:在 iOS6 SKD 中,UIInterface.h 中的 cmets 建议如下:
组样式表视图背景不能再由 一种简单的颜色。 如果您想在自己的视图中有背景 看起来像表格视图背景,那么您应该创建 一个空的表格视图并将其放在您的内容后面。
此方法将在 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 中将视图背景设置为白色或任何您喜欢的颜色以抑制警告。
【讨论】:
【参考方案3】:我写了一个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
此解决方案还允许调整背景的外观。随意更改绘图代码:)
【讨论】:
从技术角度来看不错的解决方案 ;-) 但是,我看到的问题是 Apple 在 iOS 6 中更改了分组表视图的背景外观。因此,此方法并未涵盖所有iOS 版本。即使它会在运行时检查 iOS 版本,它也不是面向未来的解决方案。 必须包含 [tableViewBackgroundImage 保留];如果您直接在应用程序中处理内存分配。否则第二次访问新颜色时会崩溃。 @glsaza 你是对的,但是使用 ARC 它不会崩溃,因为静态变量默认是强的(__strong 并不是真正需要的,但更明确)。【参考方案4】:试试这个:
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
【讨论】:
【参考方案5】:首先,将其添加到您的 viewDidLoad:
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
或
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"tableViewBackground.png"]];
然后将此图片添加到您的应用中:
tableViewBackground.png
tableViewBackground@2x.png
【讨论】:
这也会映射到在 iPad 上使用它吗?我不记得图案是否会干净地重叠到侧面。如果是这样,这将非常有效(到处投票) 哈哈,奇怪的是我在浏览 iOS 的 BNR 指南时遇到了这个问题。很高兴和你一起工作猫王。 :-) 这些图像并不是 iOS 6 中当前图像的 100% 复制品。我的设计师几乎可以立即将它们识别为奇怪的。 点击图片链接将我带到..blank页面..! :(如何获取图像..? @Shailesh:它们有 1px 和 2px 高,请在你的应用中试试。【参考方案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];
// ...
【讨论】:
【参考方案7】:对以前的 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];
【讨论】:
【参考方案8】:如果您使用故事板并且有很多视图,您可能很难找到视图。您可以单击右上角的“显示版本编辑器”按钮。这会将故事视图更改为 XML 文本视图。搜索“groupTableViewBackGroundColor”。您应该找到具有此属性的视图。
【讨论】:
【参考方案9】:详细说明@NSElvis 的解决方案,这里是相同的分组表格视图背景资源(它足够宽,因此您不会在横向上获得有趣的效果)
back-tableview@2x.png
要使用它,只需这样做
[YOUR_VIEW setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"back-tableview"]]];
【讨论】:
以上是关于在 iOS 6 上不推荐使用 groupTableViewBackgroundColor 吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3 在 ViewController 中的 GroupTable
在 Android 6.0 Marshmallow (API 23) 上不推荐使用 getColor(int id)
应用程序在 iOS 6 上运行但在 iOS 5 上不运行 [重复]
带有 iOS 6 SDK 的 Xcode 5:“UIAccelerometer”不可用:在 OS X 上不可用