Фрейм Swift 4.2 SafeAreaLayoutGuide аналогичен фрейму view.frame в представлении «Загрузить» - PullRequest
0 голосов
/ 01 ноября 2018

Я использую безопасные руководства, программно (т.е.) без раскадровок. Я хочу получить доступ к размеру safeAreaLayoutGuides, layoutFrame в моем приложении, но не знаю, когда его вызвать. Если вы звоните по номеру viewDidLoad, возвращаемый размер совпадает с полным view.frame size. Когда приложение догонит и перенастроит? Мое полное приложение имеет 5 экранов в пределах menubarcontroller. Первый экран загружается с контентом, ограниченным view.topAnchor, когда я активировал view.safeAreaLayoutGuide.topAnchor. Если вы переключитесь на другую вкладку / экран, этот экран будет в порядке, а когда вы вернетесь к первому, макет исправится. В базовом примере я добавил кнопку, которая печатает размеры кадра после загрузки представления и возвращает правильный размер. Я не хочу, чтобы мой пользователь нажимал кнопку, чтобы правильно загрузить вид.

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        print(view.frame) // Returns (0.0, 0.0, 375.0, 812.0)
        print(view.safeAreaLayoutGuide.layoutFrame) // Returns (0.0, 0.0, 375.0, 812.0)

    }

    @IBAction func button(_ sender: Any) {

        print(view.frame) // Returns (0.0, 0.0, 375.0, 812.0)
        print(view.safeAreaLayoutGuide.layoutFrame) // Returns (0.0, 44.0, 375.0, 734.0)

    }
}

1 Ответ

0 голосов
/ 01 ноября 2018

Благодаря Милану. Я экспериментировал и обнаружил следующее:

`

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    print("ViewWillLayout: \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)
    print("ViewDidAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print("ViewDidLayoutSubviews \(view.safeAreaLayoutGuide.layoutFrame)")
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    print("ViewWillAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}`

Результаты с консоли

  • Вид. Размер кадра: (0,0, 0,0, 375,0, 812,0) // Размер кадра
  • ViewDidLoad: (0,0, 0,0, 375,0, 812,0) // То же, что и размер кадра
  • ViewWillAppear (0.0, 0.0, 375.0, 812.0) // То же, что и размер кадра
  • ViewWillLayout: (0,0, 88,0, 375,0, 690,0) // Работы
  • ViewDidLayoutSubviews (0.0, 88.0, 375.0, 690.0) // Работы
  • ViewDidAppear (0.0, 88.0, 375.0, 690.0) // Работы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...