Question

Comment puis-je changer la hauteur de mon Application est aujourd'Hui l'Extension dans le Centre de Notification?

Je l'ai essayé avec Interface Builder et avec du Code, l'Interface Builder Affiche la Vue à hauteur de 600, mais ce n'est pas l'application de cette hauteur sur le périphérique.

Il semble que je ne peux pas le faire plus grand que certaines de 80 pixels...

enter image description here

Était-ce utile?

La solution

Dans votre widget UIViewController.m (Objective-C):

self.preferredContentSize = CGSizeMake(0, 200);

Fera de votre widget, d'une hauteur de 200.

Notez que la largeur n'aura aucun effet sur la vue, que les widgets doivent tenir dans la largeur exacte du centre de notification, qui est effectué automatiquement.

Aussi, si vous souhaitez animer des changements dans la hauteur de votre point de vue, vous pouvez mettre en œuvre (Objective-C):

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

de votre point de vue contrôleur à l'aide d' -animateAlongsideTransition:completion:

La réponse était un peu caché;vous avez eu à cliquer dans la documentation barre latérale pour finalement trouver ce document de fantastique.


Une autre façon est d'utiliser auto-contraintes de mise en forme pour limiter votre point de vue en hauteur.

Autres conseils

Les Widgets ont leurs hauteurs ajustée par le système.Si vous avez défini votre hauteur à l'aide de contraintes ce sera automatiquement ajusté au besoin.Si vous êtes à l'aide de disposition explicite, vous pouvez en demander un nouveau en modifiant la hauteur preferredContentSize de votre widget.

Notez que vous n'avez aucune garantie centre de notification de respecter la hauteur de votre demande:il peut être ajusté automatiquement, il peut être ajusté, mais pas à la hauteur exacte que vous voulez, ou il peut ne pas être reconnus par tous.

La meilleure façon de développer un widget d'utiliser l'auto-contrainte de mise en page pour définir vos valeurs de hauteur, de cette façon, votre widget de s'adapter à différentes hauteurs avec facilité.

Depuis iOS 10 extension, la hauteur est de 110 pixels.Vous devez utiliser le nouveau mode de protocole de widgetActiveDisplayModeDidChange:withMaximumSize: pour étendre l'extension de la taille (Objective-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;
    }
}

Aussi, vous aurez besoin de faire appel setWidgetLargestAvailableDisplayMode: sur votre poste contexte d'aujourd'hui vue du contrôleur viewDidLoad méthode comme ceci (Objective-C):

if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
    self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}

Ce thread peut être utile https://forums.developer.apple.com/thread/48930

Le meilleur moyen est bien sûr de l'autolayout, mais par défaut, il y a des marges que vous pouvez contrôler comme celle-ci

func widgetMarginInsetsForProposedMarginInsets
    (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
    return UIEdgeInsetsZero
}

Il existe deux façons d'afficher l'extension d'aujourd'hui:

  1. Mode compact (hauteur fixe pour widget)
  2. Développer le mode (hauteur variable pour widget)
  3. Quel que soit le code que vous effectuez pour modifier la hauteur de l'extension en mode compact ne fera aucune différence.Donc, vous devez modifier le mode du mode compact en expansion.

    // 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);
      }
    }
    

    Vous pouvez renvoyer WWDC pour plus de mises à jour sur les extensions de l'application

Today Widget par défaut UiedgeIsetsfulfaultfaularginIsets (UiedGetinsets) DefaultMarginIsets (haut= 0, gauche= 44, bas= 39, droite= 0)

Vous devriez ajouter cette méthode

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top