我正在从事一个项目。我有很多UITableView
个设置为清晰的颜色。他们的观点'背景颜色设置为我的自定义颜色,一切都很好 iPhone 。
问题出现在 iPad 上!我尝试了几乎所有的东西,但我的UITableView
有一种白色。
我查看了其他主题,例如: UITableView backgroundColor always gray on iPad ,但没有任何效果。另外,我的问题不是灰色,它像雪一样白了!
可能是什么原因?
答案 0 :(得分:124)
好消息:根据发行说明,适用于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上强制使用白色背景。我能够使用视图层次结构调试器确定这一点。
一旦我这样做了,我就可以使用表格的背景颜色而不必设置背景视图,尽管这样也可以。
答案 1 :(得分:38)
您可以通过在appDelegate文件中设置外观API设置来解决此问题:
夫特:
UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
答案 2 :(得分:19)
不是设置背景颜色,而是尝试使用背景视图,如下所示:
- (void)viewDidLoad {
self.tableView.backgroundView = [UIView new];
self.tableView.backgroundView.backgroundColor = [UIColor clearColor];
}
我遇到的问题是使用backgroundColor并不总能产生效果,但设置背景视图却可以正常工作。
答案 3 :(得分:12)
建立Ben Flynn的答案... cell.contentView背景颜色不一定等于cell.background颜色。在这种情况下,我发现这有助于在更多情况下解决iPad白色背景问题:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.backgroundColor = cell.backgroundColor;
return cell;
}
虽然这句话看起来很荒谬和疯狂......但它解决了这个问题。
答案 4 :(得分:10)
我有一个表格视图,里面有许多不同的单元格,每个单元格都有不同的颜色。
@Ben Flynn cell.backgroundColor = self.contentView.backgroundColor
的答案无法实现。
原因是self.contentView.backgroundColor
为零,所以你所做的只是清除cell.backgroundColor = nil
。
基本上它是来自Xcode的错误(我想,是的,它很糟糕!),cell.backgroundColor
仍然有颜色,但它无法显示。
调试一段时间后,根据@Ray W回答,这是我的解决方案。
@impelement YouCustomCellClass
- (void)awakeFromNib {
[super awakeFromNib];
self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}
@end
答案 5 :(得分:4)
这为我解决了这个问题
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
tableView.backgroundColor = UIColor.clear
}
答案 6 :(得分:3)
根据我的经验,某些版本的iOS在调用委托的tableView:willDisplayCell:forRowAtIndexPath:
之前设置了UITableViewCell的backgroundColor。在该方法中重新设置回自定义颜色可以修复它。
答案 7 :(得分:2)
SWIFT 3.XX
把这个
UITableViewCell.appearance().backgroundColor = UIColor.clear
在AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
答案 8 :(得分:1)
我正在使用Storyboard
和UITableViewControlrs
,所以最简单的决定是将所有控制器子类化,并将此方法添加到父
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
cell.backgroundColor = [UIColor clearColor];
}
}
答案 9 :(得分:1)
<强> SWIFT 强>
这也发生在我身上。我的SWRevealViewController中的表格视图在我的iPad上显示为白色,当它在我的iPhone上看起来很清晰时(这是我想用背景图像的方式)。我尝试了以上所有内容,但这最终在我的viewDidLoad()中为我工作。
tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()
答案 10 :(得分:1)
我通过将此问题放在我的UITableViewCell
子类中来解决这个问题:
从NIB文件加载单元格时:
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.clear
}
当系统重用该单元时
override func prepareForReuse() {
super.prepareForReuse()
self.backgroundColor = UIColor.clear
}
iOS 10应该在Interface Builder中修复此问题,因为 animeshporwal 表示。
答案 11 :(得分:0)
这可以在故事板中实现,如下所示:
结果:iPad和iPhone模拟器视图看起来相同
答案 12 :(得分:0)
我刚刚遇到这个问题,并通过更改View的backgroundColor(而不是tableView的一个)来修复它。在iPad上似乎是首先使用的那个,在我的情况下,它被设置为白色。
答案 13 :(得分:0)
<强> SWIFT 强> 我也有这个问题。在.phone上正常工作,但tableViewCells在.pad上显示白色。我想我是如何使用swift修复它的。
将tableViewCell作为@IBOutlet连接到viewController.swift,如下所示:
require(data.table)
require(microbenchmark)
require(feather)
ns <- as.integer(10^seq(2, 6, length.out = 25))
DTn <- function(nn)
data.table(
str1 = sample(sprintf("%010d",1:nn)),
str2 = sample(sprintf("%09d",1:nn)),
str3 = replicate(nn,paste0(sample(LETTERS,sample(10:30,1),T), collapse="")),
str4 = sprintf("%05d",sample(sample(1e5,50),nn,T)),
str5 = sample(replicate(17,paste0(sample(LETTERS, sample(15:25,1),T), collapse="")),nn,T),
num1 = round(exp(rnorm(nn,mean=6.5,sd=1.5)),2),
str6 = sample(c("Y","N"),nn,T),
str7 = sample(c("M","F"),nn,T),
str8 = sample(c("B","W"),nn,T),
int1 = as.integer(ceiling(rexp(nn))),
num2 = round(exp(rnorm(nn,mean=6,sd=1.5)),2),
num3 = (-1)^sample(2,nn,T)*round(exp(rnorm(nn,mean=6,sd=1.5)),2))
count <- data.table(n = ns,
c = c(rep(1000, 12),
rep(100, 6),
rep(10, 7)))
mbs <- lapply(ns, function(nn){
print(nn)
set.seed(51423)
DT <- DTn(nn)
microbenchmark(times = count[n==nn,c],
write.csv=write.csv(DT, "writecsv.csv", quote=FALSE, row.names=FALSE),
save=save(DT, file = "save.RData", compress=FALSE),
fwrite=fwrite(DT, "fwrite_turbo.csv", quote=FALSE, sep=","),
feather=write_feather(DT, "feather.feather"))})
png("microbenchmark.png", height=600, width=600)
par(las=2, oma = c(1, 0, 0, 0))
matplot(ns, t(sapply(mbs, function(x) {
y <- summary(x)[,"median"]
y/y[3]})),
main = "Relative Speed of fwrite (turbo) vs. rest",
xlab = "", ylab = "Time Relative to fwrite (turbo)",
type = "l", lty = 1, lwd = 2,
col = c("red", "blue", "black", "magenta"), xaxt = "n",
ylim=c(0,25), xlim=c(0, max(ns)))
axis(1, at = ns, labels = prettyNum(ns, ","))
mtext("# Rows", side = 1, las = 1, line = 5)
legend("right", lty = 1, lwd = 3,
legend = c("write.csv", "save", "feather"),
col = c("red", "blue", "magenta"))
dev.off()
然后在viewDidLoad中输入以下内容:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
defaultConfig {
applicationId "com.example.petersenrr.test"
minSdkVersion 8
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
//compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile files('libs/android-support-v4.jar')
compile files('libs/httpclient-android-4.3.5.jar')
compile files('libs/httpclient-4.5.2.jar')
compile files('libs/httpcore-4.4.4.jar')
}
很奇怪,我不知道这里发生了什么,但这解决了我。
答案 14 :(得分:0)
答案 15 :(得分:0)
我有一个带有半透明表视图单元格的透明表格视图。我在创建表时将表视图背景颜色设置为清除。这适用于除iPad + iOS 8之外的所有iOS /设备组合,其中背景颜色保持白色。
对我来说,将单元格的背景颜色设置为半透明,将内容视图背景颜色设置为清除工作,因为我在每个tableView(_ tableView: UITableView, cellForRowAt indexPath)
上执行此操作。对我来说问题只是表视图背景仍然是白色。
我尝试了所有关于此问题的组合,但我唯一需要做的就是在每个tableView(_ tableView: UITableView, cellForRowAt indexPath)
上将表格视图背景设置为透明。不是非常直观,但至少它是有效的。 :P