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...

enter image description here

¿Fue útil?

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:

  1. Modo compacto (altura fija para el widget)
  2. Modo expandir (altura variable para el widget)
  3. 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;}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top