UITableView backgroundColor在iPad上始终为白色


75

我正在做一个项目。我有很多UITableViews设置为清晰的颜色。他们的视图的背景色设置为我的自定义颜色,并且在iPhone上一切正常。

这个问题出现在iPad上!我几乎尝试了所有方法,但是我UITableView的颜色是白色。

我检查了其他主题,例如:UITableView backgroundColor在iPad上始终为灰色,但没有任何效果。另外,我的问题不是灰色,而是白如雪!

可能是什么原因呢?


您是否在将Xcode 6与大小类一起使用?您可以根据所使用的尺寸等级设置不同的背景颜色。
brandonscript

@remus Nope,我在Xcode 6上工作,但我禁用了尺寸等级。
Göktuğ阿拉尔

3
制作单元时设置一个断点,然后转到Debug-> View Debugging-> Capture View Hierarchy。这将使您检查视图堆栈的每个子视图,从而可以准确地看到引起问题的视图。请注意,我认为这仅在模拟器中有效
Chris

设置contectview和单元格以清除颜色
Vineesh TP 2014年

@Chris我一周前在真实设备上尝试过:)
zcui93

Answers:


125

好消息:根据发行说明,对于iOS 10:

在iPad上运行时,现在将遵守情节提要中为UITableViewCell设置的背景色。

对于版本<10:

我在iOS 8(8.3)中看到了这一点。即使在IB中,我的单元格为“纯色”,而其内容视图为“纯色”,它们仍将呈现为白色。一个不完美但合理的解决方案,因为它仍然采用IB的价值:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.backgroundColor = cell.contentView.backgroundColor;
    return cell;
}

似乎已出队的可重复使用单元在iPad上的背景被迫变为白色。我能够使用视图层次结构调试器来确定这一点。

完成此操作后,我就可以使用表格的背景颜色,而不必设置背景视图,尽管这样做也可以。


向@SterlingChristensen发消息,其答案来自此。
本·弗林

奇怪的是,这对我有用。提交雷达:openradar.appspot.com/radar?id=5187188266369024
Geoffrey Wiseman

但是,此方法有效,但应注意,即使IB包含值,cell.contentView.backgroundColor仍可能返回nil,因此,当UITableView的背景颜色与其单元格不同时,它可能不起作用。
Crashalot '16

我不知道苹果开发商的想法!
哈桑

谢谢,对我来说很棒。我的情况下,我需要反过来cell.contentView.backgroundColor = cell.backgroundColor。在打印cell.contentView.backgroundColor并注意到nil之前,我删除了您的建议,并在情节
提要中

39

您可以通过在appDelegate文件中进行外观API设置来解决此问题:

迅速:

UITableViewCell.appearance().backgroundColor = UIColor.clearColor()

1
此解决方案挽救了我的生命!谢谢
naffie '16

像魅力一样工作!在目标C中:[UITableViewCell appearance].backgroundColor = [UIColor clearColor];
Solsma Dev

唯一对我有用的解决方案!谢谢一大堆!
daisura99

尼斯,简单的解决方案!
Fivewood '17

19

代替设置背景颜色,而是尝试使用背景视图,如下所示:

- (void)viewDidLoad {
    self.tableView.backgroundView = [UIView new];
    self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}

我遇到了使用backgroundColor并不总是能产生效果的问题,但是设置背景视图却可以正常工作。


是的,它有效,谢谢。但这真的很奇怪!TableView的clearColor可以在iPhone上使用,但是为什么不能在iPad上使用。有什么区别?
Göktuğ阿拉尔

平板必须支持手机不支持的某些UI模型,例如拆分视图控制器和弹出窗口,这可能与它有关。我想知道它是否会在iPhone 6+上发生,因为它必须支持许多相同的UI功能。
约翰·史蒂芬

六岁以上
儿童

当您有足够的表格单元填充屏幕时还是仅在短表格上,它保持白色?似乎与表格中的单元格数量有关。
Crashalot '16

12

以本·弗林的答案为基础... cell.contentView背景颜色不一定等于cell.background颜色。在这种情况下,我发现这可以解决更多情况下的iPad白色背景问题:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        ...
        cell.backgroundColor = cell.backgroundColor;
        return cell;
    }

尽管该声明看起来很荒谬和疯狂……但它解决了这个问题。


嗨,我正在尝试让此功能适用于Monotouch。我正在使用ac#实现与Xamarin.iOS。我该如何实施您的解决方案?
naffie '16

抱歉,此技巧无法在iPad上解决此问题。cell.backgroundColor = [UIColor clearColor]; 做到了。
malhal '16

10

迅捷5

我有一个表格视图,里面有许多不同的单元格,每个单元格都有不同的颜色。

@Ben Flynn的答案cell.backgroundColor = self.contentView.backgroundColor无法实现。原因是self.contentView.backgroundColor无,所以您所做的只是清除cell.backgroundColor = nil

基本上,这是Xcode的错误(我认为,是的,很烂!), cell.backgroundColor仍然有颜色,但是无法显示。

经过一段时间的调试后,基于@Ray W答案,这是我的解决方案。

class YourCustomCell: UICollectionViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = backgroundColor // Tricky to re-apply the background color
    }
}

如果我将其放入“ @implementation UITableViewCell(fixiPadColors)”之类的类别,则对我有用。
液化石油气

不应该那样做。我更喜欢@Ray W解决方案。检查这里的原因stackoverflow.com/questions/9424004/...
nahung89

5

这为我解决了这个问题

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    tableView.backgroundColor = UIColor.clear
}

3

以我的经验,某些版本的iOS在调用委托的之前先设置UITableViewCell的backgroundColor tableView:willDisplayCell:forRowAtIndexPath:。使用该方法重置为自定义颜色即可修复该问题。


是的,这是解决方案,即使很奇怪!我在iPad模拟器iOS 8.2上尝试时找到了它,但在所有其他iPhone版本上都是正确的。只需输入[cell setBackgroundColor:[UIColor clearColor]]; 到上述地点。
BootMaker

是的,这个答案也可以使用,因为我已经尝试过了,我在iOS 9 iPad tableveiw单元格背景颜色变为白色的同时在所有iPhone上都可以正常工作时遇到同样的问题
Waseem05'8

2

斯威夫特3.1

我通过将其放在UITableViewCell子类中来解决此错误:

从NIB文件加载单元时:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundColor = UIColor.clear
}

当系统正在重用该单元时

override func prepareForReuse() {
    super.prepareForReuse()
    self.backgroundColor = UIColor.clear
}

正如animeshporwal所说,iOS 10应该可以在Interface Builder中解决此问题。


2

SWIFT 3.XX

放这个

UITableViewCell.appearance().backgroundColor = UIColor.clear

AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool

1

我使用Storyboardwith UITableViewControlrs,所以最简单的决定是对所有控制器进行子类化,并将此方法添加到parent

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
        cell.backgroundColor = [UIColor clearColor];
    }
}

1

迅速

这也是我发生的事情。当我的iPhone上的SWRevealViewController中的表格视图看起来很清晰(这是我想要的背景图片)时,它在iPad上的SWRevealViewController中的表格视图显示为白色。我尝试了上述所有方法,但这最终在我的viewDidLoad()中为我工作。

tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()

0

这可以在情节提要中实现,如下所示:

  • 显示故事板的文档大纲
  • 在表格中,选择一个TableViewCell
  • 转到该单元格中的内容视图
  • 设置内容视图的背景色。

结果:iPad和iPhone模拟器视图看起来相同


0

我只是遇到了这个问题,并通过更改View的backgroundColor(而不是tableView的之一)来解决它。在iPad上似乎是最先使用的,在我的情况下,它被设置为白色。


0

迅速 我也有这个问题。在.phone上工作正常,但是tableViewCells在.pad上变为白色。以为我会展示如何使用swift修复它。

将tableViewCell作为@IBOutlet连接到viewController.swift,如下所示:

    @IBOutlet weak var tvc1: UITableViewCell!
    @IBOutlet weak var tvc2: UITableViewCell!
    @IBOutlet weak var tvc3: UITableViewCell!

然后在viewDidLoad中放入以下内容:

tvc1.backgroundColor = tvc1.backgroundColor
tvc2.backgroundColor = tvc2.backgroundColor
tvc3.backgroundColor = tvc3.backgroundColor

很奇怪,我不知道这里发生了什么,但这为我解决了。



0

我有一个带有半透明表视图单元格的透明表视图。创建表格时,我将表格视图的背景色设置为清除。此功能适用于iPad / iOS 8以外的所有iOS /设备组合,背景颜色保持白色。

对我来说,将单元格的背景色设置为半透明,将内容视图的背景色设置为清除作品,因为我在每个单元格上都进行了设置 tableView(_ tableView: UITableView, cellForRowAt indexPath)。对我来说,问题只是表格视图背景仍然是白色。

我尝试过找到有关此问题的所有组合,但实际上我唯一需要做的就是将每个表格视图的背景设置为透明tableView(_ tableView: UITableView, cellForRowAt indexPath)。这不是超级直观,但至少可以起作用。:P

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.