2017-09-28 57 views
0

我的视图中存在透明度问题,尤其是UITableViewSwift 4 backgroundColor bug?

只是为了确保。我已经有了3年的快速经验,这是我第一次遇到这个问题。

所以在苹果的文档里面写着: backgroundColor 视图的背景颜色。

此属性的更改可以为动画。默认值是零,这将导致在一个透明的背景色。”

但将清晰颜色backgroundColortableView.backgroundColor = UIColor.clear时,背景仍出现白色。

这是一个错误或功能?

编辑:

的的tableView不是问题了它是的tableView内的细胞 已经尝试过的解决方案清除了所有子视图的背景色一切都没变

0。

编辑17年9月29日

好吧,我调试我的应用程序,并得到这个:

UICachedDeviceWhiteColor和cachedColor。

UICachedDeviceWhiteColor

阿谷歌搜索也没有帮助。

编辑2017年9月29日当天晚些时候...

出现的问题,从3迅速更新到迅速4. 当我做了一个新的项目,迅速4,但实际上工作正常。 因为这是一个问题,我必须解决。我会尝试一些事情并不时更新这篇文章。

+2

有'contentView'上'backgroundView'之上,玩弄这一观点。 – Desdenova

+0

你能告诉我们完整的代码吗? –

+0

你应该检查你的视图层次结构,它可能是在你的UITableView后面有一些其他的UIView,它有一个.white backgroundColor。 –

回答

0

发现了问题: 当实例显示其之前持有的观点的变量,这种观点的背景色为白色。调试器调用这个UICachedDeviceWhiteColor。

你为什么要这么做? 如果实例化视图显示在它之前,你可以用不同的视图之间的菜单非常快“bringSubview(toFront:...)切换。

如何解决: 为了解决这个问题,你必须实例化查看您想要显示它的每一次。

希望我能帮助一些迷失的灵魂与这个答案,苹果将修复这个bug。

0

确认它背后的视图不是白色,然后将当前视图的(透明背景)modalPresentationStyle设置为overCurrentContext。这将允许后面的视图通过UIColor.clear背景颜色显示。

+0

对不起,解决方案无法正常工作。 – user2982195

+0

请Google“Swift模式演示风格”找到详细的教程。为了通过清晰的背景色查看视图,您需要成功完成此操作。 –

1

在UITableViewCell和UICollectionViewCell中有一个名为contentView的属性视图。

一个常见的错误是直接操纵细胞。而是试图操纵细胞内容视图

Obj-c 

UITableViewCell *cell = ....// get the cell 

cell.backgroundColor = ... // BAD ! 

cell.contentView.backgroundColor = [UIColor redColor] // this is the correct way. 

斯威夫特

let cell = ... 
cell.contentView.backgroundColor = UIColor.red // make sure its the contentView 

也有几个小的细微差别颜色和透明度:

如果你想背景有不透明度(即小于100%),请确保您是而不是更改视图的不透明度(即view.alpha = 0.5 BAD) - 改变颜色的不透明度值代替:

cell.contentView.backgroundColor = [UIColor colorWithRed:... green:... blue:... alpha:0.5]; 

另一个有用的技巧是暂停应用程序和按下“视觉调试”按钮。

搜索您的观点,并检查它的属性在检查

0

如果要设置

tableView.backgroundColor = .red 

,如果它一个emp Ty TableView然后红色将是可见的。我给一个headerView和FooterView也可视化。

simulator screen shot - iphone se - 2017-12-09 at 16 02 40

现在的TableView内容的一些数据,所以反映的颜色,你需要设置背景颜色为单元格。

class UserCell: UITableViewCell { 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    backgroundColor = .yellow 
} 
.... 
} 

simulator screen shot - iphone se - 2017-12-09 at 16 04 18 simulator screen shot - iphone se - 2017-12-09 at 16 04 30

You can check out the original project here.