分组 UITableView 的背景颜色在 iOS7 中不会透明

Posted

技术标签:

【中文标题】分组 UITableView 的背景颜色在 iOS7 中不会透明【英文标题】:The background colour of a grouped UITableView will not go transparent in iOS7 【发布时间】:2013-09-22 13:17:19 【问题描述】:

我正在开发一个应用程序,它在 ios 6 上运行得非常好。在 iOS7 上,该应用程序有几个布局和一般的外观问题。一个是无法将分组表视图的背景颜色设置为透明。这是我的代码,它不再起作用了

    tableForDetails = [[UITableView alloc]initWithFrame:CGRectMake(0, yAxisTable, 320, 150) style:UITableViewStyleGrouped];
    UIColor *backGroundColor = [UIColor clearColor];
    UIView *bview = [[UIView alloc]init];
    [bview setBackgroundColor:backGroundColor];
    [tableForDetails setBackgroundView:bview];

非常感谢您的帮助。谢谢

【问题讨论】:

【参考方案1】:

在 iOS7 中为分组的 uiTableview 设置背景透明度真的很容易。解决方案比我最初想象的还要简单。

[tableForDetails setBackgroundColor:[UIColor clearColor]];

或仅用于半透明

[tableForDetails setBackgroundColor:[[UIColor alloc]initWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]];

这对我来说很好。

【讨论】:

恕我直言,尺寸不是关键要求。这也可以 UIView* bgv = [[UIView alloc] init];bgv.backgroundColor = [UIColor clearColor]; [self.tableView setBackgroundColor:[UIColor clearColor]]; [self.tableView setBackgroundView:bgv];关键似乎是 setBackgroundColor 感谢您的评论。我意识到你是对的。我将编辑答案。【参考方案2】:

我用这个修复了它:

tableView.backgroundView = UIView.new;

【讨论】:

【参考方案3】:

我将 Apple 组件的任何改进都放在了一个超类中。 BasicTableView.m 中应用了以下升级,扩展了UITableView

1) 覆盖 setBackgroundColor 以与 iOS 7 及更高版本一起使用,同时保持与 iOS 6 和 5 的向后兼容性。 2) 覆盖initWithCoder:initWithFrame:style: 将背景颜色初始化为默认透明背景

- (id) initWithCoder:(NSCoder *)decoder

    self = [super initWithCoder:decoder];
    if (self) 
        [self setup];
    

    return self;


- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style

    self = [super initWithFrame:frame style:style];

    if (self) 
         [self setup];
    

    return self;


- (void) setup

    //Set the BG color to clear color by default
    [self setBackgroundColor:[UIColor clearColor]];


- (void) setBackgroundColor:(UIColor *)backgroundColor

    if (self.style == UITableViewStyleGrouped) 
        if (majorSystemVersion() < 7) 
            UIView *tableBgView = [[UIView alloc] init];
            tableBgView.backgroundColor = backgroundColor;
            self.backgroundView = tableBgView;
         else 
            [super setBackgroundColor:backgroundColor];
        

    


//majorSystemVersion() is defined elsewhere in a utility file
int majorSystemVersion(void) 
    NSString *systemVersion = [UIDevice currentDevice].systemVersion;
    NSArray *systemVersionComps = [systemVersion componentsSeparatedByString:@"."];
    NSString *majorVersion = [systemVersionComps objectAtIndex:0];

    return [majorVersion intValue];

【讨论】:

【参考方案4】:

UITableViewCell 在 iOS 7 中默认为白色背景

把它放在你的 cellforRowAtIndexPath 中

[单元格设置背景颜色:[UIColor clearColor]]

【讨论】:

以上是关于分组 UITableView 的背景颜色在 iOS7 中不会透明的主要内容,如果未能解决你的问题,请参考以下文章

分组 UITableView 自定义绘制单元格,而不更改背景颜色?

iOS 8 UITableView 背景颜色外观

iOS:背景颜色——UITableView 和附件具有相同的背景颜色

在通用应用程序中设置 UITableView 背景颜色(iOS 5)

在iOS中点击时如何更改UITableView Header背景颜色

iOS UITableView:使用 CAGradientLayer 将背景颜色分配为渐变