为 customView 设置背景颜色无效

Setting background color for customView has no effect

我有一个 customView,我在 button-tap 之后显示。我的问题是设置 .backgroundColor 没有效果,它只是一个 clear 背景。

自定义视图:

let wishWishView: WishStackView = {
    let v = WishStackView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

添加视图按钮:

@objc func addWishButtonTapped(){

    self.view.addSubview(self.wishWishView)
    wishWishView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
    wishWishView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true

}    

WishWishView 只是一个简单的 UIView,里面有一个 StackView

我的猜测是 UIStackView,不支持背景色。

您可以在此处详细了解发生这种情况的原因以及可能的解决方法:

您的代码完全错误,首先您要这样设置您的视图:

let wishWishView: UIView = {
    let v = UIView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()

现在设置你的 stackView,在我的示例中,我在垂直轴上放置了 2 个标签:

let stackView: UIStackView = {
    let label1 = UILabel()
    label1.text = "Label 1"
    label1.textColor = .red
    label1.font = UIFont.systemFont(ofSize: 16)

    let label2 = UILabel()
    label2.text = "Label 2"
    label2.textColor = .black
    label2.font = UIFont.systemFont(ofSize: 16)

    let sV = UIStackView(arrangedSubviews: [label1, label2])
    sV.axis = .vertical
    sV.distribution = .fillEqually
    sV.translatesAutoresizingMaskIntoConstraints = false

    return sV
}()

之后设置您的按钮:

let buttonAddView: UIButton = {
    let button = UIButton(type: .system)
    button.setTitle("Add View", for: .normal)
    button.setTitleColor(.white, for: .normal)
    button.backgroundColor = .red
    button.addTarget(self, action: #selector(addWishButtonTapped), for: .touchUpInside)
    button.translatesAutoresizingMaskIntoConstraints = false
    return button
}()

在viewDidLoad中添加按钮并设置约束

view.addSubview(buttonAddView)
    buttonAddView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20).isActive = true
    buttonAddView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20).isActive = true
    buttonAddView.heightAnchor.constraint(equalToConstant: 50).isActive = true
    buttonAddView.widthAnchor.constraint(equalToConstant: 120).isActive = true

现在写一个函数,当按钮被右约束点击时,在里面添加带有堆栈视图的视图,在你的函数中你只调用视图的位置而不是它的大小。像这样写你的函数:

@objc func addWishButtonTapped(){

    view.addSubview(self.wishWishView)
    wishWishView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
    wishWishView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
    wishWishView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    wishWishView.widthAnchor.constraint(equalToConstant: 200).isActive = true

    wishWishView.addSubview(stackView)
    stackView.topAnchor.constraint(equalTo: wishWishView.topAnchor).isActive = true
    stackView.bottomAnchor.constraint(equalTo: wishWishView.bottomAnchor).isActive = true
    stackView.leadingAnchor.constraint(equalTo: wishWishView.leadingAnchor, constant: 10).isActive = true
    stackView.trailingAnchor.constraint(equalTo: wishWishView.trailingAnchor, constant: -10).isActive = true

}

现在只需更改 wishWishView 的背景即可自动设置 stackView 背景,仅此而已...