如何在Swift 3中使这个UITableView清晰(透明)

时间:2016-11-18 13:35:14

标签: ios swift uitableview swift3

如何在Swift 3中使这个UITableView和它的单元格清晰。

我已经完成了之前的主题,但我仍然有白色背景。

从我的代码中可以看出,我尝试了各种方法:

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显示问题 - 请注意显示表格的黑线仅未填充(因为没有人登录)

但是很明显,然后变成白色。 我哪里错了?

这是我发现的另一篇文章:

Apple文件说

...在iOS 7中,单元格默认为白色背景;在早期版本的iOS中,单元格继承封闭表视图的背景颜色。如果要更改单元格的背景颜色,请在tableView:willDisplayCell:forRowAtIndexPath:表视图委托方法中执行此操作。

您可能需要使用willDisplayCell UITableView委托方法为表格视图提供透明背景。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cellforRowAtIndexPath:(NSIndexPath *)indexPath

{
  [cell setBackgroundColor:[UIColor clearColor]];
}

如何应用上面的代码,因为它代表iOS 7?

13 个答案:

答案 0 :(得分:44)

注意:以下代码已在Swift 3中进行了测试。

方法1:

storyboard中选择您的tableViewCell,然后转到Attributes Inspector下的View更改Backgroundclear

方法2 :在cellForRowAt

中尝试以下代码
  cell.layer.backgroundColor = UIColor.clear.cgColor

enter image description here

注意:如果上述方法无效,请按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
}

答案 1 :(得分:9)

你可以试试这个

viewDidLoad

tableView.backgroundColor = UIColor.clear

cellForRowAt:

cell.contentView.backgroundColor = UIColor.clear

它为我工作。

答案 2 :(得分:7)

您必须清除表格和单元格背景。

内部tableView函数:

tableView.backgroundColor = .clear
cell.backgroundColor = .clear
tableView.tableFooterView = UIView()

答案 3 :(得分:4)

为此,你必须实现一个新的tableview方法:

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

答案 4 :(得分:4)

前两个答案对我不起作用,因此我到处都添加了清晰的背景,白色的bg消失了。

cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
tableView.backgroundColor = .clear

SWIFT 4.2

答案 5 :(得分:2)

您缺少设置单元格contentView的背景颜色。

cell.contentView.backgroundColor = UIColor.clear

答案 6 :(得分:1)

也许,您可以查看表格视图的字母。

答案 7 :(得分:1)

设置这些内容并不足够,因为您尚未将clear color应用于contentView的{​​{1}},因此其中的颜色为白色。在cellForRowAtIndexPath中尝试这个

tableView

答案 8 :(得分:1)

确保在Identity Inspector中有自定义类 - > Class" 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操作符错误。

答案 9 :(得分:1)

我使用swift 3测试过。

uiTableName.backgroundView = nil
uiTableName.backgroundColor = UIColor.clear

答案 10 :(得分:1)

TableViewTableViewCell 的 Storyboard 中,不要将背景设置为“Clear/Default”,而是将背景设置为白色(或任何颜色)并具有不透明度0.

enter image description here

还要确保您将 ContentView 背景设置为清除,但 TableViewCell 是我绊倒的原因。通过这样做,您不需要在代码中执行任何操作。

答案 11 :(得分:0)

在Swift 4中,在所需类的viewDidLoad下编写以下代码:-

tableView.backgroundColor = UIColor.clear

在cellForRowAt(即tableView的dataSource)下编写以下代码:-

let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifierName", for: indexPath) as! UITableViewCell //Cell ClassName
cell.layer.backgroundColor = UIColor.clear.cgColor
return cell

答案 12 :(得分:0)

为什么没人这么说?

@IBOutlet weak var tableView: UITableView!
// Drag and drop the tableView from the storyboard

override func viewDidLoad() {
   super.viewDidLoad()      
   tableView.isHidden = true
}

结果使您有机会用单行隐藏整个tableView。