如何在 Swift 3 中使这个 UITableView 清晰(透明)
Posted
技术标签:
【中文标题】如何在 Swift 3 中使这个 UITableView 清晰(透明)【英文标题】:How do I make this UITableView clear (transparent) in Swift 3 【发布时间】:2016-11-18 13:35:13 【问题描述】:如何使 UITableView
和它的单元格在 Swift 3 中清晰。
我已经完成了之前的线程,但我仍然得到白色背景。
从我的代码中可以看出,我已经尝试了提到的各种方法:
override func viewDidLoad()
self.communitiesTableView.delegate = self
self.communitiesTableView.dataSource = self
let background = CAGradientLayer().bespokeColor()
background.frame = self.view.bounds
// view.addSubview(background)
super.viewDidLoad()
// Do any additional setup after loading the view.
在我的单元格表函数中:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let title = self.communities[indexPath.row]
let cell = UITableViewCell()
cell.textLabel?.text = title
cell.textLabel?.font = UIFont(name: "Avenir", size: 12)
cell.textLabel?.textColor = UIColor.red
cell.textLabel?.backgroundColor = UIColor.clear
cell.contentView.backgroundColor = UIColor.clear
communitiesTableView.backgroundColor = UIColor.clear
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell
这个 gif 显示了问题 - 请注意显示表格的黑线只是没有填充(因为没有人登录)
但有一秒钟它是清晰的,然后变成白色。 我哪里错了?
这是我发现的另一篇文章:
苹果文档说
... 在 ios 7 中,单元格默认为白色背景;在早期版本的 iOS 中,单元格继承了封闭表格视图的背景颜色。如果要更改单元格的背景颜色,请在表格视图委托的 tableView:willDisplayCell:forRowAtIndexPath: 方法中进行。
您可能需要使用 willDisplayCell UITableView 委托方法为您的表格视图设置透明背景。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cellforRowAtIndexPath:(NSIndexPath *)indexPath
[cell setBackgroundColor:[UIColor clearColor]];
我如何应用上面的代码,因为它说它适用于 iOS 7?
【问题讨论】:
代码看起来不错。对于调试,设置cell.textLabel.backgroundColor = UIColor.clear
。如果问题仍然存在,则涉及另一种观点。在这种情况下,显示视图和单元格在情节提要中是如何堆叠的。这个:cell.isOpaque = false
不需要,视图 alpha 与您的问题无关。
添加人的建议后问题依旧。我已经更新了代码以反映这一点。该表包含在 StackView 中。如果我从这个 StackView 中删除表,问题仍然存在......
我已将表格从 StackView 中取出,但问题仍然存在。
在cellForRowAt indexPath
中尝试一次cell.backgroundColor = .clear
。 `
清晰约一秒钟,然后变白
【参考方案1】:
注意:以下代码已在Swift 3
中测试。
方法一:
从storyboard
中选择您的tableViewCell,然后转到View
下的Attributes Inspector
,将Background
更改为clear
方法 2: 在您的 cellForRowAt
中尝试以下代码
cell.layer.backgroundColor = UIColor.clear.cgColor
注意:如果上述方法不起作用。请尝试按shift + option + command + k
清除您的项目构建
更新:从下面的代码更新您的cellForRowAt
...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
cell.textLabel?.text = communities[indexPath.row]
cell.textLabel?.font = UIFont(name: "Avenir", size: 12)
cell.textLabel?.textColor = UIColor.red // set to any colour
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell
【讨论】:
感谢所有的努力。它没有用 - 我认为您在此处显示的内容是正确的,并且这种情况下的问题必须与表格的加载方式有关。就像它第一次出现时一样清晰,然后变白。 我以为我已经尝试过了,直到我阅读了您的答案并意识到颜色设置为“默认”而不是“清除颜色”。【参考方案2】:你可以试试这个
在 viewDidLoad 中:
tableView.backgroundColor = UIColor.clear
在cellForRowAt:
cell.contentView.backgroundColor = UIColor.clear
这对我有用。
【讨论】:
这对我有用,加上 - cell.backgroundColor = UIColor.clear 谢谢@HH887,只要 cell.backgroundColor = UIColor.clear 为我工作【参考方案3】:您必须将表格和单元格背景都设置为清除。
tableView函数内部:
tableView.backgroundColor = .clear
cell.backgroundColor = .clear
tableView.tableFooterView = UIView()
【讨论】:
还是没有变化……奇怪。 刚刚添加:tableView.tableFooterView = UIView() 仍然没有运气 这很奇怪。刚刚经过测试,似乎对我来说工作正常。除了建议清洁(Shift-Command-K)和重新启动之外,我真的无能为力。【参考方案4】:前两个答案对我不起作用,所以我在各处添加了清晰的背景,白色背景消失了。
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
tableView.backgroundColor = .clear
SWIFT 5.5.3
【讨论】:
【参考方案5】:为此,您必须实现一个新的 tableview 方法:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath)
cell.backgroundColor = UIColor.clear
【讨论】:
【参考方案6】:您缺少设置单元格 contentView 的背景颜色。
cell.contentView.backgroundColor = UIColor.clear
【讨论】:
【参考方案7】:也许,您可以检查一下表格视图的 alpha。
【讨论】:
将 alpha 值设置为零将隐藏包含所有子视图的完整表格视图。 alpha 值始终影响子视图的透明度。 这是一个有用的答案。我有一个案例,我正在加载一个包含来自各种核心数据实体的数据的表。当表从新实体加载值时,我希望表刷新。但是,如果特定数据集中没有值,则不会发生这种情况 - 不调用 cellForRow。在数据收集例程中将 alpha 设置为 0,然后在 cellForRow 中设置为 1 为我解决了表重置问题。 YMMV【参考方案8】:设置这些是不够的,因为您还没有将clear color
应用于tableView
的contentView
,因此它在其中着色为白色。在 cellForRowAtIndexPath 中试试这个
cell.contentView.backgroundColor = UIColor .clearColor()
【讨论】:
您需要更改三样东西的颜色。 1)TableView 的背景,2)TableView 的单元格,3)TableView 单元格的内容视图,除非您在单元格顶部创建任何其他东西,否则您将获得完全透明的背景。 肯定还有一些我们遗漏的东西——我已经更新了问题中的代码,以表明我已经完成了你提到的所有事情(我相信) 想一想,您是不是想清除 tableView 的颜色,但您已将 tableView 后面的视图设置为白色并认为 tableView 的颜色不清晰?不确定,只是一个想法。可能这会有所帮助。 @RDowns【参考方案9】:确保在 Identity Inspector 的下拉菜单中选择了自定义类 -> 类“YourCustomClassCellName”。在 Interface Builder 中选择 UITableViewCell 后,确保您的标识符是“YourCellName”,然后在返回单元格之前的 func tableView(_ tableViewL UITableView, cellForRowAt) 方法中,您有 cell.backgroundColor = UIColor.clear 即
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellName", for: indexPath) as? YourCellNameClass
cell.configureCell(parameter: ClassDataModel[indexPath.row])
cell.backgroundColor = UIColor.clear
return cell
else
return UITableViewCell()
我遇到了同样的问题并编写了所有代码,然后我检查以确保我的 CellClass 已被选中并且当我花了一个小时想知道为什么它在另一个 viewController 上而不是在这个实例中工作时,我遇到了同样的问题。即使你使用 IB 清除默认的白色背景,你仍然需要编写 cell.backgroundColor = UIColor.clear。我想是的,我在 8.2.1 中发现了另一个错误,但不仅仅是 iD10t 操作员错误。
【讨论】:
【参考方案10】:我使用 swift 3 进行了测试。它正在工作
uiTableName.backgroundView = nil
uiTableName.backgroundColor = UIColor.clear
【讨论】:
【参考方案11】:在 TableView 和 TableViewCell 的情节提要中,不要将背景设置为“清除/默认”,而是将背景设置为具有不透明度的白色(或任何颜色) 0。
还要确保将 ContentView 背景设置为清除,但 TableViewCell 是让我绊倒的原因。通过这样做,您不需要在代码中做任何事情。
【讨论】:
【参考方案12】:在 Swift 4 中,在所需类的 viewDidLoad 下编写以下代码:-
tableView.backgroundColor = UIColor.clear
在你的tableView的cellForRowAt即dataSource下写如下代码:-
let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifierName", for: indexPath) as! UITableViewCell //Cell ClassName
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell
【讨论】:
【参考方案13】:为什么没人说这个?:
@IBOutlet weak var tableView: UITableView!
// Drag and drop the tableView from the storyboard
override func viewDidLoad()
super.viewDidLoad()
tableView.isHidden = true
结果让你有机会用一行隐藏整个 tableView。
【讨论】:
以上是关于如何在 Swift 3 中使这个 UITableView 清晰(透明)的主要内容,如果未能解决你的问题,请参考以下文章