Как определить рамку UIView в корневом представлении при использовании Auto Layout? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть UIView, который я поместил в окно, используя auto layout.Однако, когда я попытался распечатать кадр UIView в консоли, я вернулся к нулю.Как можно определить местоположение UIView?

Причина, по которой я хотел бы знать фрейм, заключается в том, что я хотел бы использовать следующие функции при отображении нескольких UIViews

func intersects(CGRect) -> Bool Возвращает, пересекаются ли два прямоугольника.

func contains(CGRect) -> Bool Возвращает, содержит ли первый прямоугольник второй прямоугольник.

 var margin: UILayoutGuide!

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor.white
    margin = self.view.layoutMarginsGuide

    let sq1 = Square.init(color: UIColor.blue)
    self.view.addSubview(sq1)

    sq1.translatesAutoresizingMaskIntoConstraints = false
    sq1.heightAnchor.constraint(equalToConstant: 200).isActive = true
    sq1.widthAnchor.constraint(equalToConstant: 200).isActive = true
    sq1.topAnchor.constraint(greaterThanOrEqualTo: margin.topAnchor, constant: 20).isActive = true
    sq1.centerXAnchor.constraint(equalTo: margin.centerXAnchor).isActive = true

    print("sq1.frame: \(sq1.frame)")
}


 class Square: UIView{

var colour: UIColor

init(color: UIColor) {
    self.colour = color
    super.init(frame: .zero)
    self.backgroundColor = color
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

КОНСОЛЬ:

sq1.frame: (0.0, 0.0, 0.0, 0.0)

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Внутри использования ВК viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewDidlayoutSubviews()
      print("sq1.frame: \(sq1.frame)")
}

Внутри класса представления

override func layoutSubviews() {
    super.layoutSubviews()
      print("self.frame: \(self.frame)")
}
0 голосов
/ 11 июля 2019

Я думаю, что лучше всего подождать, пока не будет вызван layoutSubviews(). Вы можете использовать код, подобный следующему:

 class Square: UIView{

    let colour: UIColor

    init(color: UIColor) {
        self.colour = color
        super.init(frame: .zero)
        self.backgroundColor = color
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        print("frame: \(frame)")
    }

    required init?(coder aDecoder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...