UILabels не рендерится в UIStackView с помощью addArrangedView; сделать с addSubView - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть UIStackView, и я пытаюсь добавить 2 метки в качестве детей. Когда я добавляю их с помощью addArrangedSubview, в моем представлении ничего не отображается, но когда я просто использую addSubview, отображаются оба ярлыка (хотя и не там, где я хочу). Что я делаю не так?


import UIKit

class RepCounterView : UIView {
    var count : Int = 0

    lazy var repCountLabel: UILabel = {
        let repCountLabel = UILabel(frame: CGRect.init(x: 0, y: 0, width: 120, height: 120))
        repCountLabel.textColor = UIColor.white
        repCountLabel.font = UIFont.systemFont(ofSize: 100)
        repCountLabel.text = String(count)
        repCountLabel.textAlignment = .center

        return repCountLabel
    }()

    lazy var repsLabel: UILabel = {
        let repsLabel = UILabel(frame: CGRect.init(x: 0, y: 0, width: 120, height: 120))
        repsLabel.textColor = UIColor.white
        repsLabel.font = UIFont.systemFont(ofSize: 10)
        repsLabel.text = repCountLabel.text == "1" ? "rep" : "reps"
        return repsLabel
    }()

    lazy var stackView : UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.distribution = .fill
        stackView.alignment = .center

        return stackView
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setup()
    }

    override func draw(_ rect: CGRect) {
        self.layer.cornerRadius = self.bounds.size.width / 2
    }

    func setup() {
        self.clipsToBounds = true
        self.addSubview(self.stackView)

        // This is where .addSubview works, but this doesn't
        self.stackView.addArrangedSubview(repCountLabel)
        self.stackView.addArrangedSubview(repsLabel)
    }
}

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Если вы задаете ограничения с помощью автоматического макета, вы должны добавить tackView.translatesAutoresizingMaskIntoConstraints = false. Ваш обновленный код,

lazy var stackView : UIStackView = {
        let stackView = UIStackView()
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.axis = .horizontal
        stackView.distribution = .fillEqually
        stackView.alignment = .fill

        return stackView
    }()

func setup() {
        self.clipsToBounds = true
        self.addSubview(self.stackView)

        // This is where .addSubview works, but this doesn't
        self.stackView.addArrangedSubview(repCountLabel)
        self.stackView.addArrangedSubview(repsLabel)

        stackView.widthAnchor.constraint(equalToConstant: 200).isActive = true
        stackView.heightAnchor.constraint(equalToConstant: 200).isActive = true 
    }
1 голос
/ 25 февраля 2020
import UIKit

class RepCounterView : UIView {
var count : Int = 5

lazy var repCountLabel: UILabel = {
    let repCountLabel = UILabel(frame: CGRect.init(x: 0, y: 0, width: 120, height: 120))
    repCountLabel.textColor = UIColor.white
    repCountLabel.font = UIFont.systemFont(ofSize: 100)
    repCountLabel.text = String(count)
    repCountLabel.textAlignment = .center

    return repCountLabel
}()

lazy var repsLabel: UILabel = {
    let repsLabel = UILabel(frame: CGRect.init(x: 0, y: 0, width: 120, height: 120))
    repsLabel.textColor = UIColor.white
    repsLabel.font = UIFont.systemFont(ofSize: 10)
    repsLabel.text = repCountLabel.text == "1" ? "rep" : "reps"
    return repsLabel
}()

lazy var stackView : UIStackView = {
    let stackView = UIStackView(arrangedSubviews: [repCountLabel, repsLabel])
    stackView.axis = .horizontal
    stackView.distribution = .fill
    stackView.alignment = .center
    stackView.translatesAutoresizingMaskIntoConstraints = false
    return stackView
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    self.setup()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.setup()
}

override func draw(_ rect: CGRect) {
    self.layer.cornerRadius = self.bounds.size.width / 2
}

func setup() {
    self.clipsToBounds = true
    self.addSubview(self.stackView)
    stackView.heightAnchor.constraint(equalToConstant: 200).isActive = true
    stackView.widthAnchor.constraint(equalToConstant: 200).isActive = true

    // This is where .addSubview works, but this doesn't
    //        self.stackView.addArrangedSubview(repCountLabel)
    //        self.stackView.addArrangedSubview(repsLabel)
    }
    }

Попробуйте этот обновленный код. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...