Странное поведение AdditionalSafeAreaInsets - PullRequest
0 голосов
/ 09 декабря 2018

Я довольно новичок в разработке для iOS, и я сталкиваюсь с неожиданным и странным поведением в UIViewController, когда устанавливаю переменную AdditionalSafeAreaInsets.

Причина, по которой я устанавливаю ограничение безопасной области, заключается в том, что я использую эту библиотеку для реализации бокового меню в моем приложении.Поскольку библиотека реализует боковое меню, используя UIViewController, то есть размер полного экрана, полностью смещает его влево, используя ширину экрана, а затем уменьшает смещение на предварительно определенное значение, чтобы отобразить меню.В портретном режиме я устанавливаю меньшее дополнительное значение левой безопасной области (например, 75, поскольку ширина меньше), а в альбомной ориентации я должен использовать большее значение для описания безопасной области (например, 364).

Что происходит, так это то, что вначале, когда на портрете все работает нормально, затем после поворота на пейзаж все работает также хорошо.Но при повороте из альбомной в портретную ориентацию используется большее альбомное значение, и все смещается вправо из-за неправильного значения.Кажется, причина в том, что я могу только увеличить значения переменных AdditionalSafeAreaInsets, но не уменьшить их?Это ожидаемое поведение UIKit и как его избежать или сбросить AdditionalSafeAreaInsets?

Ниже приведен соответствующий код внутри моего UIViewController

@available(iOS 11.0, *)
func updateLeftInset(size: CGSize) {

    let leftInset = size.width - SideMenuController.preferences.basic.menuWidth

    self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: leftInset, bottom: 0, right: 0)

}

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    print("viewWillTransition")

    if #available(iOS 11.0, *) {
        updateLeftInset(size: size)
    } else {
        // Fallback on earlier versions
    }
}

override func viewDidLoad() {
    if #available(iOS 11.0, *) {
        updateLeftInset(size: view.bounds.size)
    } else {
        // Fallback on earlier versions
    }
}

1 Ответ

0 голосов
/ 10 декабря 2018

Проблема в том, что границы представления в viewDidLoad() неверны.

Вы должны сделать это в viewWillAppear, там вы получите правильное значение.

Что касается значениянеправильно, AdditionalSafeAreaInsets представляет, насколько вы хотите, чтобы представление уменьшало безопасную область, поэтому вы, вероятно, хотите это:

self.additionalSafeAreaInsets = UIEdgeInsets(top: 0, left: SideMenuController.preferences.basic.menuWidth, bottom: 0, right: 0)

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