UITableView背景清晰


90

我意识到iOS 7尚未正式发布,我们不应该讨论它,但是我很想解决这个问题。在iOS 6上,我的表格视图是透明的,看起来很棒。首次运行iOS 7,背景为白色。

我试过将表格backgroundColor,单元格颜色等更改为UIColor clearColor,但没有更改。

如何解决这个问题?

桌子


1
试图将桌子摆放整齐backgroundView吗?
撤消

您能在设置背景颜色的地方显示代码吗?父视图呢?也许表视图的背景很清楚,但是父视图不是这样吗?
sooper

我注意到了同样的事情,但是当我安装的应用程序比我的当前版本早于iOS 7.0时,这没有发生。那么这个问题是否出在xCode5.0上?
Totumus Maximus 2013年

Answers:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

在cellForRowAtIndexPath中

此外,请确保您的表视图实际上具有透明背景(在情节提要中): enter image description here


乔治,在方法中添加该代码-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
IanStallings 2013年

1
在这种情况下,如果您确实需要selectedBackgroundView,则可以在cellForRowAtIndexPath中放置以下内容:cell.selectedBackgroundView = [[[UIImageView分配] initWithImage:[UIImage imageNamed:@“ yourBgImage.png”]]自动释放]; 甚至在awakeFromNib中:self.selectedBackgroundView = ...注意,self.backgroundColor = [UIColor clearColor]; 在iOS7下的awakeFromNib中不起作用。但是:cell.backgroundColor = [UIColor clearColor]; 仅可在iOS 7.0的cellForRowAtIndexPath中正常工作
slamor

11
只需要添加以下行:cell.backgroundColor = [UIColor clearColor];
evya 2013年

就像charm cell.backgroundColor = [UIColor clearColor];一样。
bpolat

如何在Swift中做到这一点?
卡迪尔·侯赛因

58

把这个:

cell.backgroundColor = [UIColor clearColor];

在这个部分:

cellForRowAtIndexPath

1
在IOS 6,它是足够的设置backgroundView到一个空的视图,但需要为iOS 7.这个额外的代码
凯文边框

25

尝试先将backgroundView设置为nil。

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

不知道这是iOS7文档的更改还是一直存在并且只是不影响背景颜色,而是根据UITableView类参考@property backgroundView

“必须将此属性设置为nil才能设置表格视图的背景色。”

编辑:更正后的代码语法


25

已经回答了这个问题,但是在很多方面都是错误的。

您需要实现以下委托方法:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

您无法将修复程序放在cellForRowAtIndexPath中,因为那是在渲染单元格之后,并且它将在背景设置为清除之前(在较慢的设备上)闪烁白色背景。

使用此委托方法,您的问题就解决了!


1
是。对于iOS 7,这是清除背景的方法。上面的所有其他建议可能不起作用。
girish_vr 2014年

15

实际上,根据文档(UITableViewCell类参考),更改单元格背景颜色的正式正确位置是不同的:

无论使用预定义单元格还是自定义单元格,都可以使用backgroundView属性或更改继承的backgroundColor属性来更改单元格的背景。在iOS 7中,默认情况下,单元格具有白色背景;在iOS的早期版本中,单元格继承了封闭表格视图的背景色。如果要更改单元格的背景颜色,请在表视图委托的tableView:willDisplayCell:forRowAtIndexPath:方法中进行更改。


我正在尝试此操作,但是显示的最初所有单元格都有白色背景。如果我通过滚动创建新的单元格,那么它们将具有我想要的透明背景。不知道还有什么尝试…
大卫·邓纳姆

没关系,这似乎是一个计时问题。我在awakeFromNib中做事,还为时过早。
大卫·邓纳姆


6

这是一个令人沮丧的问题。这是我当前的解决方案:

将此添加到您的UITableViewCell子类。

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

天啊。谢谢。救了我一晚。您的答案应该是被接受的答案。
米沙尔·沙茨

5

这在iOS7 +中对我有用:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

然后在 cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];


4

这仅对我有用,当我为每个单元格编辑了清晰的背景色并为表格本身编辑了清晰的色时。

设置表格的透明颜色:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

设置单元格的颜色:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

一件事很好。UITable的默认颜色似乎是白色(我不知道为什么)

背景白色

但是最好改变一下。


完善!那就是失踪的和平。无需其他代码行!
Morpheus78

3

第一组

tableView.backgroundColor = [UIColor clearColor];

第二组

tableCell.backgroundColor = [UIColor clearColor];

3

为表视图创建IB出口@IBOutlet弱var yourTable:UITableView!

查看负载

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

如果您想清除Cell的颜色,请在

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

在我的应用程序,我必须设置backgroundColor我的UITableViewCell[UIColor clearColor]的颜色,当我进行更新iOS 7


2

尝试

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

cell.backgroundColor = [UIColor clearColor];

2

在我的情况下,该单元是使用xib创建的。似乎xcode5上的界面生成器无法将clearColor设置为cell.backgroundColor。

我要做的只是确实要设定

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

控制到达非无效函数的结尾
ropo 2014年


2

迅捷3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];


0

迅速3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.