Изменить цвет фона пользовательского UIView - PullRequest
0 голосов
/ 22 мая 2018

Я хочу изменить цвет фона моего пользовательского UIView.Я пишу код цвета фона внутри функции init, но ничего не происходит.Я думаю, это потому, что UIView's рамка не была установлена, когда я объявляю цвет фона.Однако я не знаю, как я могу решить эту проблему.

Мой код пользовательского класса

class WelcomeScreenButtonView: UIView {

private lazy var label = UILabel()
private lazy var logoImage = UIImageView()

override init(frame: CGRect) {
    super.init(frame: frame)
    translatesAutoresizingMaskIntoConstraints = false
    setupUI()
    setupConstraints()
}
public convenience init(text: String, imageName: String){
    self.init()
    self.label.text = text
    self.logoImage.image = UIImage(named: imageName)?.withRenderingMode(.alwaysTemplate)
}
required public init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func setupConstraints(){
    logoImage.anchor(self.topAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
    label.anchor(self.logoImage.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 10, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
}
func setupUI(){
    layer.cornerRadius = 6.0
    logoImage.contentMode = .scaleAspectFit
    logoImage.translatesAutoresizingMaskIntoConstraints = false
    logoImage.tintColor = UIColor.white
    label.translatesAutoresizingMaskIntoConstraints = false
    label.textAlignment = .center
    label.numberOfLines = 2
    label.lineBreakMode = .byWordWrapping
    label.textColor = UIColor.white
    label.font = GeneralFont.lightFont.withSize(13)

    addSubview(label)
    addSubview(logoImage)
    backgroundColor = UIColor.blue

}
}

Я также пытался сделать это там, где я объявляю это пользовательское представление

let myCustomView = WelcomeScreenButtonView()
myCustomView.backgroundColor = UIColor.blue

Но ничего не произошло.Кстати, я помещаю это представление внутрь UIStackView.

РЕДАКТИРОВАТЬ: Как ваши ответы, я думаю, у меня есть проблема, где я объявляю это.

override func viewDidLoad() {
    let incidentView = WelcomeScreenButtonView(text: "Hasar\nAnında", imageName: "hasar")
    stackView.axis  = UILayoutConstraintAxis.horizontal
    stackView.distribution = UIStackViewDistribution.fillProportionally
    stackView.alignment = UIStackViewAlignment.bottom
    stackView.spacing = 0.0
    stackView.addArrangedSubview(incidentView)
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.anchor(nil, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 90, rightConstant: 0, widthConstant: 0, heightConstant: 90)

}

PS: я проверил много сообщений об этой проблеме, но большинство из них предназначены для представлений Xib и target-c.Поэтому я хотел задать новый вопрос.

Проверенные мной сообщения;

установка собственной настройки цвета фона UIView

Настройка фонацвет подкласса UIView не работает

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Я проверил ваш код, вам нужно установить стек таким образом, чтобы у пользовательского представления был стековый фрейм

       stackView.distribution = UIStackViewDistribution.fill
        stackView.alignment = UIStackViewAlignment.fill

viewDidLoad

override func viewDidLoad() {
    let incidentView = WelcomeScreenButtonView(text: "Hasar\nAnında", imageName: "hasar")
         stackView.axis  = UILayoutConstraintAxis.horizontal
            stackView.distribution = UIStackViewDistribution.fill
            stackView.alignment = UIStackViewAlignment.fill
            stackView.spacing = 0.0
    stackView.addArrangedSubview(incidentView)
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.anchor(nil, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 90, rightConstant: 0, widthConstant: 0, heightConstant: 90)

}
0 голосов
/ 22 мая 2018

На самом деле проблема в том, что вы устанавливаете цвет фона в init().

init, фактически используемом для инициализации вида / объекта (т. Е. Память выделяется для вида / объекта)

Но вы устанавливали цвет в init(), это означает, что память вида не выделяется.

Вот почему цвет фона не устанавливается при просмотре.

Вам необходимо установить его после просмотрауспешно инициализирован.

let view = MyCustomView()
view.backgroundColor = UIColor.red
0 голосов
/ 22 мая 2018

Попробуйте, вставив в метод рисования

override func draw(_ rect: CGRect) {
}
...