Swift 4.0 - Utilizar SafeAreaLayoutGuide de manera programada
Swift 4.0 - Utilizar SafeAreaLayoutGuide de manera programada — RO Solutions Blog
Con la introducción del nuevo dispositivo de Apple el año pasado, el iPhone X y más recientemente el iPhone XR, XS Y XS MAX, para los programadores se ha vuelto tarea principal el actualizar todas las Apps que ya habíamos subido a la App Store o que aún se encuentran en desarrollo, esto con el fin de que las Apps se vean bien tanto en la nueva generación de iPhone's que cuentan con el Notch, así como con las generaciones anteriores. El primer paso es utilizar la instancia "SafeAreaLayoutGuide". Para ello debemos asegurarnos que nuestro proyecto esta siendo compilado para iOS 11 como mínimo. SafeAreaLayoutGuide es una guía que representa la parte de la vista que no está cubierta por las barras de navegación, barras de herramientas entre otras vistas a considerar. Anteriormente para agregar una vista a un UIViewController se hacía lo siguiente:
var viewTop : UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.layer.masksToBounds = true
view.backgroundColor = UIColor.orange
return view
}()//y en el ViewDidLoad se agrega a la vista y se declaran los Constraints
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(viewTop)
viewTop.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
viewTop.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
viewTop.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
viewTop.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}De esta manera se obtiene una vista donde se pueden agregar todos los elementos que se desean. En la nueva generación hay que cambiar lo siguiente para tomar en cuenta los nuevos márgenes:
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(viewTop)
viewTop.leftAnchor.constraint(equalTo:
view.safeAreaLayoutGuide.leftAnchor).isActive = true
viewTop.rightAnchor.constraint(equalTo:
view.safeAreaLayoutGuide.rightAnchor).isActive = true
viewTop.topAnchor.constraint(equalTo:
view.safeAreaLayoutGuide.topAnchor).isActive = true
viewTop.bottomAnchor.constraint(equalTo:
view.safeAreaLayoutGuide.bottomAnchor).isActive = true
}Agregando SafeAreaLayoutGuide se soluciona el problema con los Constraints de los bordes. A partir de iOS 11 todos los programadores de iOS debemos de considerar esto, y actualizar las Apps que tenemos en la tienda con el fin de que sean compatibles con la nueva generación de iPhone's.
