Получить безопасную область вставки сверху и снизу высоты
на новом iPhone X, каков был бы наиболее правильный способ получить как верхнюю, так и нижнюю высоту для небезопасных областей?
3 ответа:
попробуйте это :
на С
if (@available(iOS 11.0, *)) { UIWindow *window = UIApplication.sharedApplication.keyWindow; CGFloat topPadding = window.safeAreaInsets.top; CGFloat bottomPadding = window.safeAreaInsets.bottom; }
на Свифт
if #available(iOS 11.0, *) { let window = UIApplication.shared.keyWindow let topPadding = window?.safeAreaInsets.top let bottomPadding = window?.safeAreaInsets.bottom }
Swift 4
чтобы просто привязать вид к якорю безопасной области, используя ограничения, можно сделать в любой точке жизненного цикла контроллера вида, потому что ограничения обрабатываются API автоматической компоновки за кулисами. Однако для доступа к значениям этих безопасных областей для определения их высоты требуется подождать до конца жизненного цикла контроллера вида, в идеале
viewDidLayoutSubviews()
.это подключается к любому контроллеру вид:
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() var topSafeArea: CGFloat var bottomSafeArea: CGFloat if #available(iOS 11.0, *) { topSafeArea = view.safeAreaInsets.top bottomSafeArea = view.safeAreaInsets.bottom } else { topSafeArea = topLayoutGuide.length bottomSafeArea = bottomLayoutGuide.length } // safe area values are now available to use }
Я предпочитаю этот метод получения его из окна в основном из-за инкапсуляции-нет необходимости ссылаться на посторонние объекты, такие как окно, когда все уже находится в контроллере представления-и потому, что Apple хочет, чтобы мы это сделали, так как UIKit добавил Эти значения в качестве свойства самого представления (в iOS 11) для доступа.