设置UITableHeaderFooterView的backgroundColor时出错

时间:2018-11-13 04:59:26

标签: ios swift uitableview uiview

我有一个用于表视图的自定义Header类,无论何时使用它,我都会不断收到此错误:

  

[TableView]不建议在UITableViewHeaderFooterView上设置背景颜色。请改为将具有所需背景颜色的自定义UIView设置为backgroundView属性。

这是我尝试过的一些事情:

我在UITableViewHeaderFooterView子类的awakeFromNib()中添加了一个backgroundView:

package learnjava; 
import java.util.Scanner;
public class exception {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int x =1;
    do {
        try {
            System.out.println("Input first number : ");
            int n1 = input.nextInt();
            System.out.println("Input second number : ");
            int n2 = input.nextInt();
            int sum = n1 / n2;//if your n2 input was 0 exception happened and go to catch block.
            System.out.println("result = "+sum);
            x = 2;// if one time your code execute without exception the x changed to 2. if exception happened your code execute again.

        } catch (Exception e) {
            System.out.println("Error");

        }

    } while (x == 1);

     }
 }

我在tableView函数中添加了backgroundView,它定义了标头部分:

override func awakeFromNib() {
    super.awakeFromNib()
    self.backgroundView = UIView(frame: self.bounds)
    self.backgroundView?.backgroundColor = UIColor(red:0.84, green:0.47, blue:0.97, alpha:1.0)
}

完成所有这些操作后,我仍然会收到错误消息。

4 个答案:

答案 0 :(得分:1)

我能够防止出现错误。这是我的操作方式:

转到标题的Xib文件,并为背景色选择默认值。然后,在viewForHeaderInSection函数中,添加:

let backgroundView = UIView(frame: CGRect.zero)
backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
headerView.backgroundView = backgroundView

我知道我在问题中提到了它,但是关键是将xib背景色设置为“默认”。

答案 1 :(得分:0)

检查您是否必须设置process.js

在您的headerView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)函数中。

此外,这足以添加背景色

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

答案 2 :(得分:0)

如果可以继承UITableViewHeaderFooterView的类,则可以尝试这种方法。

class SampleHeaderView: UITableViewHeaderFooterView {
    override func awakeFromNib() {
        super.awakeFromNib()

        let bgView = UIView(color: .black)

        addSubview(bgView)

        bgView.translatesAutoresizingMaskIntoConstraints = false
        let layoutAttributes: [NSLayoutAttribute] = [.top, .leading, .bottom, .trailing]
        layoutAttributes.forEach { attribute in
            addConstraint(NSLayoutConstraint(item: bgView,
                                             attribute: attribute,
                                             relatedBy: .equal,
                                             toItem: self,
                                             attribute: attribute,
                                             multiplier: 1,
                                             constant: 0.0))
        }
    }
}

extension UIView {
    convenience init(color: UIColor) {
        self.init(frame: .zero)
        backgroundColor = color
    }
}

答案 3 :(得分:0)

使用名称(FooBar fb) => identical(fb, fb3) 时,您不会收到错误消息:

  

1)歧义使用“ backgroundView”

     

2)无法覆盖可变属性“ backgroundView”

     

3)无法使用存储的属性“ backgroundView”覆盖

由于您没有添加backgroundView,因此您正在使用backgroundView拥有的那个。

对于UITableViewHeaderFooterView

awakeFromNib

对于override func awakeFromNib() { super.awakeFromNib() let bgView = UIView(frame: self.bounds) bgView.backgroundColor = UIColor(red:0.84, green:0.47, blue:0.97, alpha:1.0) self.addSubview(bgView) }

viewForHeaderInSection

您只需要将名称func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: Header.identifier) as? Header { // Extraneous Code let bgView = UIView(frame: headerView.bounds) bgView.backgroundColor = UIColor(white: 0.5, alpha: 0.5) headerView.addSubview(bgView) return headerView // Extraneous code } return UIView() } 更改为其他名称即可。