Ios 为customView设置背景色无效

Ios 为customView设置背景色无效,ios,swift,uiview,background-color,Ios,Swift,Uiview,Background Color,我有一个自定义视图,点击按钮后显示该视图。我的问题是设置.backgroundColor没有效果,它只是一个清晰的背景 自定义视图: let wishWishView: WishStackView = { let v = WishStackView() v.backgroundColor = .cyan v.translatesAutoresizingMaskIntoConstraints = false return v }() @objc func addW

我有一个
自定义视图
,点击
按钮后显示该视图。我的问题是设置
.backgroundColor
没有效果,它只是一个
清晰的
背景

自定义视图:

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

}    
添加视图按钮:

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
,它不支持背景色


您可以在这里阅读更多关于发生这种情况的原因以及可能的解决方法:

我猜这是一个
UIStackView
,它不支持背景色


您可以在此处阅读更多关于发生这种情况的原因以及可能的解决方法:

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

let wishWishView: UIView = {
    let v = UIView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()
@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

}
现在设置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
现在,编写一个函数,当点击按钮并带有正确的约束时,该函数将添加内部带有堆栈视图的视图。在函数中,您只调用视图的位置,而不调用视图的大小。按如下方式编写函数:

let wishWishView: UIView = {
    let v = UIView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()
@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背景,就这样…

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

let wishWishView: UIView = {
    let v = UIView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()
@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

}
现在设置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
现在,编写一个函数,当点击按钮并带有正确的约束时,该函数将添加内部带有堆栈视图的视图。在函数中,您只调用视图的位置,而不调用视图的大小。按如下方式编写函数:

let wishWishView: UIView = {
    let v = UIView()
    v.backgroundColor = .cyan
    v.translatesAutoresizingMaskIntoConstraints = false
    return v
}()
@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背景,就这样…

将背景颜色应用于视图而不是stackView这就是我要做的
WishStackView
是一个
UIView
,名称可能会让人混淆,但正如我在问题中所说,它是
UIView中的
StackView
请在视图中添加高度和宽度锚定。谢谢,这实际上是我甚至没有意识到的另一个问题。将背景色应用于视图而不是StackView这就是我正在做的
WishStackView
是一个
UIView
,名称可能会让人混淆,但正如我在问题中所说,它是
UIView中的
StackView
请在视图中添加高度和宽度锚定。谢谢,这实际上是另一个我甚至没有意识到的问题。谢谢你的回答,但你到底想说什么:D我有几乎完全相同的代码。我只是没有发布我的
WishStackView
的代码以及我是如何设置的,因为这很明显。你是对的。谢谢,我本可以添加另一个
视图设置
。我在@Simon和@NexusOk的帮助下解决了这个问题,祝你有愉快的一天:)谢谢你的回答,但你到底想说什么:D我有几乎完全相同的代码。我只是没有发布我的
WishStackView
的代码以及我是如何设置的,因为这很明显。你是对的。谢谢,我本可以添加另一个
视图设置
。我在@Simon和@NexusOk的帮助下解决了这个问题,祝您愉快:)