如何在 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 应用于tableViewcontentView,因此它在其中着色为白色。在 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】:

TableViewTableViewCell 的情节提要中,不要将背景设置为“清除/默认”,而是将背景设置为具有不透明度的白色(或任何颜色) 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 清晰(透明)的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中使背景视图透明但图像不透明[关闭]

在pickerview(Swift 3,Xcode)中使(第一)行不可选择

如何在 Swift 中使按钮具有圆形边框?

如何在 Swift 中使 iPhone 状态栏透明?

如何在 Swift 中使状态栏标题颜色为白色? [复制]

如何在 Swift iOS 中使 web 视图不可点击