У меня есть viewController, я использую якоря и хочу получить кадр кнопки. Я хочу, чтобы кадр был только при включенном виде, поэтому я использую isMovingToParentViewController
. Как это:
if isMovingToParentViewController {
let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}
Когда я добавляю его в viewWillAppear
, код для получения рамки кнопки запускается, но когда я добавляю тот же код в viewDidLayoutSubviews
, он не запускается.
Почему это так?
Просто чтобы быть ясным в viewDidLayoutSubviews
, когда я добавляю точку останова, она достигает if isMovingToParentViewController
, но код внутри этого никогда не срабатывает.
Когда представление выдвигается на isMovingToParentViewController получает удар, когда оно появляется isMovingToParentViewController не получает удар.
override func viewDidLoad() {
super.viewDidLoad()
// anchors are set here but the frames haven't been set yet
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if isMovingToParentViewController {
// this code runs
let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if isMovingToParentViewController {
// this code NEVER runs
let myButtonFrame = myButton.convert(myButton.bounds, to: self.view)
}
}