ionic ios status bar overlap
El método supportInterfaceOrientations no anula ningún método de su superclase (1)
Me gusta esto:
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
... y el resto como lo tienes.
El patrón general
Muchos de los métodos de Cocoa son propiedades ahora, por lo que los implementa como variables calculadas de anulación. Entonces, el patrón para pasar de la semilla 3 (o anterior) a la semilla 4 es:
-
Cambiar
func
avar
-
Eliminar
()
-
Cambiar
->
a:
Esto funciona porque una variable calculada tiene una función getter, por lo que la función que estaba implementando antes simplemente se convierte en la función getter. Y estas son propiedades de solo lectura, por lo que no necesitará un setter.
De manera similar, los métodos afectados son
preferredStatusBarStyle
,
prefersStatusBarHidden
,
shouldAutorotate
,
preferredInterfaceOrientationForPresentation
y muchos otros.
Busque
UIKIT_DEFINE_AS_PROPERTIES
en el encabezado de Objective-C.
Trascendencia
A largo plazo, hay otros cambios que puede hacer.
Por ejemplo,
puede
agregar un setter (dividiendo su implementación en funciones
get
y
set
), y así puede convertir su implementación en una fachada para una propiedad almacenada.
Por ejemplo:
private var _orientations = UIInterfaceOrientationMask.portrait
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
get { return self._orientations }
set { self._orientations = newValue }
}
Entonces, su código tiene una manera de establecer este valor. Si devuelve valores diferentes en momentos diferentes, esto podría hacer que las cosas sean mucho más limpias.
Notas técnicas adicionales
Curiosamente, este cambio no tiene un efecto directo en el código Objective-C existente, porque en Objective-C, la nueva declaración de propiedad,
@property(nonatomic, readonly) UIInterfaceOrientationMask supportedInterfaceOrientations;
, se satisface con el mismo método que antes:
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
La razón es que en Objective-C, una
@property(readonly)
es simplemente una promesa de que existe un método getter correspondiente, y eso es exactamente lo que es este método.
Pero en Swift, la forma de escribir el método getter de una
propiedad
Objective-C es a través de una
propiedad
, es decir, a través de una variable de instancia.
Entonces, solo el código Swift se ve afectado por el cambio: debe reescribir sus métodos como propiedades.
En un UIViewController, este código:
public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if let mainController = self.mainViewController{
return mainController.supportedInterfaceOrientations
}
return UIInterfaceOrientationMask.all
}
da el error El
Method doesn''t override any method from its superclass
Estoy usando Xcode 8 beta 4 y el objetivo de implementación de iOS es 9.0, y
Use Legacy Swift Language Version
está establecida en No en la
Build Settings
¿Cómo podría convertir el código anterior a Swift 3?