safe guide bar ios iphone-x safearealayoutguide

guide - safe area ios



Obtenga un área segura insertando las alturas superior e inferior (6)

En el nuevo iPhone X, ¿cuál sería la forma más adecuada de obtener la altura superior e inferior para las áreas inseguras?


Estoy trabajando con los marcos CocoaPods y en caso de que UIApplication.shared no esté disponible, entonces uso safeAreaInsets en la window de visualización:

if #available(iOS 11.0, *) { let insets = view.window?.safeAreaInsets let top = insets.top let bottom = insets.bottom }


Ninguna de las otras respuestas aquí funcionó para mí, pero esto sí.

var topSafeAreaHeight: CGFloat = 0 var bottomSafeAreaHeight: CGFloat = 0 if #available(iOS 11.0, *) { let window = UIApplication.shared.windows[0] let safeFrame = window.safeAreaLayoutGuide.layoutFrame topSafeAreaHeight = safeFrame.minY bottomSafeAreaHeight = window.frame.maxY - safeFrame.maxY }


Para obtener la altura entre las guías de diseño, simplemente haz

let guide = view.safeAreaLayoutGuide let height = guide.layoutFrame.size.height

Entonces full frame height = 812.0 , safe area height = 734.0

A continuación se muestra el ejemplo donde la vista verde tiene el marco de guide.layoutFrame


Prueba esto :

En el objetivo C

if (@available(iOS 11.0, *)) { UIWindow *window = UIApplication.sharedApplication.keyWindow; CGFloat topPadding = window.safeAreaInsets.top; CGFloat bottomPadding = window.safeAreaInsets.bottom; }

En veloz

if #available(iOS 11.0, *) { let window = UIApplication.shared.keyWindow let topPadding = window?.safeAreaInsets.top let bottomPadding = window?.safeAreaInsets.bottom }


Objective-C ¿Quién tuvo el problema cuando keyWindow es igual a nil ? Simplemente ponga el código de arriba en viewDidAppear (no en viewDidLoad)


Swift 4

Para anclar una vista a un ancla de área segura, se pueden usar restricciones en cualquier punto del ciclo de vida del controlador de vista porque la API de diseño automático maneja las restricciones detrás de escena. Sin embargo, acceder a los valores de esas áreas seguras para determinar sus alturas requiere esperar hasta más adelante en el ciclo de vida del controlador de vista, idealmente viewDidLayoutSubviews() .

Esto se conecta a cualquier controlador de vista:

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 }

Prefiero este método a sacarlo de la ventana porque así es como Apple diseñó la API para ser utilizada. No haga referencia a objetos extraños como la ventana cuando todo ya está en el controlador de vista. Y al usar viewDidLayoutSubviews() , los valores de área segura se actualizan durante los cambios de orientación, las barras de estado de doble altura y todas las demás mutaciones en la vista y sus áreas seguras.