Получить размер кадра в функции updateConstraint пользовательского UIView - PullRequest
0 голосов
/ 21 мая 2018

Я устанавливаю ограничения для представлений (UILabel, UIImageView) в пользовательских UIView внутри UpdateConstraint функций, как показано ниже.Как видно, я получаю высоту просмотров и использую ее в автоматическом макете.Я знаю, что могу получить размер кадра в функции layoutSubviews.Если я вызываю updateConstraint() функцию внутри layoutSubViews, все работает нормально, но я не знаю, является ли это лучшим подходом.

Кроме того, когда я пытаюсь установить кадр в layoutSubViews() с помощью label.frame = CGRect..(без автоматической разметки) ничего не происходит, и я не вижу пользовательских представлений внутри суперпредставления.

    override func updateConstraints() {
    logoImage.anchor(self.topAnchor, left: self.leftAnchor, bottom: self.bottomAnchor, right: self.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: self.frame.height / 2, rightConstant: 0, widthConstant: 0, heightConstant: 0)
    label.anchor(self.logoImage.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 12, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 0)
    super.updateConstraints()

}
override func layoutSubviews() {
    print(self.frame.height)
    updateConstraints()
}

Я искал ниже сообщения, но не могу найти решение;

Гдеполучить размер кадра пользовательского UIView в его подклассе

Подпредставление пользовательского UIView имеет неправильную x позицию кадра

1 Ответ

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

Нет необходимости обрабатывать это в layoutSubviews, если ваше текущее ограничение создает наборы расширений isActive = true, тогда у него будет правильный кадр

//

правильный способ создания customView

class CustomView : UIView {

    var imageV = UIImageView()

    var once = true

    override init(frame: CGRect) {
        super.init(frame: frame)
        sharedLayout()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sharedLayout()
    }
    func sharedLayout() {

       // set constraints here

        self.addSubview(imageV)

    }

    override func layoutSubviews() {

        if once {

            self.imageV.translatesAutoresizingMaskIntoConstraints = false

            self.imageV.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
            self.imageV.trailingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
            self.imageV.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
            self.imageV.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true

            once = false

        }

    }
}
...