¿Cómo configurar la altura de una extensión del widget de hoy?
-
21-12-2019 - |
Pregunta
¿Cómo puedo cambiar la altura de la extensión Hoy de mi aplicación en el Centro de notificaciones?
Lo probé con el generador de interfaz y con el código, el constructor de interfaz muestra la vista con la altura 600, pero no está aplicando esta altura en el dispositivo.
Parece que no puedo hacerlo más grande que unos 80 píxeles...
Solución
en su widget UIViewController.m
(Objective-C):
self.preferredContentSize = CGSizeMake(0, 200);
hará que su widget tenga una altura de 200.
Tenga en cuenta que el ancho no tendrá ningún efecto en la vista, ya que los widgets deben caber en el ancho exacto del centro de notificación, que se maneja automáticamente.
Además, si desea animar los cambios en la altura de su vista, puede implementar (Objective-C):
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
En su controlador de visor usando -animateAlongsideTransition:completion:
/ p>
La respuesta fue un poco oculta; Tuvo que hacer clic en la barra lateral de la documentación para que finalmente se encuentre Este fantástico documento .
Otra forma es usarla restricciones de diseño automático para restringir la altura de su vista.
Otros consejos
El sistema ajusta la altura de los widgets.Si ha definido su altura mediante restricciones, esta se ajustará automáticamente según sea necesario.Si está utilizando un diseño explícito, puede solicitar una nueva altura modificando el preferredContentSize
de tu widget.
Tenga en cuenta que no tiene garantía de que el centro de notificaciones respete su solicitud de altura:Es posible que se ajuste automáticamente, que se ajuste pero no a la altura exacta que desea o que no se respete en absoluto.
La mejor manera de desarrollar un widget es utilizar restricciones de diseño automático para establecer los valores de altura, de esa manera su widget se adaptará a diferentes alturas con facilidad.
Dado que la altura de la extensión iOS 10 es de 110 píxeles.Deberías utilizar un nuevo método de protocolo. widgetActiveDisplayModeDidChange:withMaximumSize:
para ampliar el tamaño de la extensión (Objetivo-C):
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
self.preferredContentSize = CGSizeMake(maxSize.width, 600.0);
} else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = maxSize;
}
}
También es posible que tengas que llamar setWidgetLargestAvailableDisplayMode:
en el contexto de su extensión en el controlador de vista de hoy viewDidLoad
método como este (Objetivo-C):
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
Este hilo puede ser útil https://forums.developer.apple.com/thread/48930
La mejor manera es, por supuesto, automáticamente, pero de forma predeterminada hay márgenes que puedes controlar así
func widgetMarginInsetsForProposedMarginInsets
(defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
return UIEdgeInsetsZero
}
Hay dos formas de mostrar hoy Extensión:
- Modo compacto (altura fija para el widget)
- Modo expandir (altura variable para el widget)
El código que haga para cambiar la altura de la extensión en el modo compacto no hará ninguna diferencia.Por lo tanto, debe cambiar el modo desde el modo compacto para expandir.
// 1. Load This in viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}
// 2. Implement another widget protocol
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
self.preferredContentSize = maxSize;
}
else {
self.preferredContentSize = CGSize(width: 0, height: 200);
}
}
Puede consultar WWDC para obtener más actualizaciones sobre las extensiones de la aplicación
Hoy Widget predeterminado Uiedgeinsets predeterminadoMargininsets (Uiedgeinsets) PredeterminadoMarginInsets= (TOP= 0, izquierda= 44, abajo= 39, derecha= 0)
Debe agregar este método
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}