UITableView / UITableViewCell挑战与iOS7上的iPad的透明背景

昨天晚上,我决定升级到Xcode 5,并看看我目前的项目。 更新我的故事板到新的UI后,一切看起来不错,运行良好。 因为我有一个通用的二进制文件,所以我决定在iPad上testing一些东西,并注意到一个新的白色背景已经引入到我的UITableview中,曾经是透明/清晰的颜色。 这似乎发生在单元级而不是表级。 当我在6.1模拟器上运行的东西时,iPad和iPhone上的一切看起来都很好。 一切看起来很好iOS7的iPhone。

我为iPhone和iPad设置的所有界面生成器都是相同的。 从我可以告诉它与这个新的“内容视图”(这是项目单元的子组)不涉及透明的值/设置有关。

任何想法/想法?

在用接口生成器浪费了好几个小时之后,我想这里可能有一个bug。 所以我开始寻找一个程序化的答案。 显然我从这里开始可以节省很多时间。 通过添加到该方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

我可以通过添加这一行来解决iPad上的透明度问题:

 cell.backgroundColor = [UIColor clearColor]; // Adding this fixes the issue for iPad 

希望这可以帮助其他人看到与iPad和iOS7的iPad的白色背景!

如果您使用自定义的UITableViewCell并从storyboard / xib调用它,则可以使用以下代码。

 @implementation YourCustomTableViewCell - (void) awakeFromNib { self.backgroundColor = [UIColor clearColor]; } 

如果其他人仍然在iPad上的表格视图/单元格透明度有问题,这可能会有所帮助(从https://stackoverflow.com/a/31396483/2301213复制,这是迅速,因为他们是一个changin');

看来在向窗口添加UITableView的过程中(在willMoveToWindow和didMoveToWindow之间),某些iPad将表视图的backgroundColor重置为白色。 它隐式地执行此操作,而不使用backgroundColor属性。

我现在使用这个作为基类代替UITableView时,我需要一个彩色/透明表…

 class ColorableTableView : UITableView { var _backgroundColor:UIColor? override var backgroundColor:UIColor? { didSet { _backgroundColor = backgroundColor } } override func didMoveToWindow() { backgroundColor = _backgroundColor super.didMoveToWindow() } } 

单元格的backgroundColor在我的iPad上以相同的方式设置为白色(即在移动到窗口期间在桌子上的那些),所以这同样适用于它们,以免最终导致出现奇怪的不透明单元格随时重复使用

 class ColorableTableViewCell : UITableViewCell { var _backgroundColor:UIColor? override var backgroundColor:UIColor? { didSet { _backgroundColor = backgroundColor } } override func didMoveToWindow() { backgroundColor = _backgroundColor super.didMoveToWindow() } } 

如果您正在使用静态单元格表​​格。 你可以做到以下几点:

 override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { cell.backgroundColor = UIColor.clearColor() }