Comment puis-je modifier la hauteur de l'extension Today de mon application dans le centre de notifications?
Je l'ai essayé avec l'Interface Builder et avec le Code, l'Interface Builder affiche la vue avec une hauteur de 600, mais il n'applique pas cette hauteur sur l'appareil.
Il semble que je ne puisse pas dépasser 80 pixels ...
Dans votre widget UIViewController.m
(Objectif c):
self.preferredContentSize = CGSizeMake(0, 200);
Fera votre widget avoir une hauteur de 200.
Notez que la largeur n'aura aucun effet sur la vue, car les widgets doivent tenir dans la largeur exacte du centre de notification, qui est géré automatiquement.
De plus, si vous souhaitez animer des changements de hauteur de votre vue, vous pouvez implémenter (Objective-C):
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
dans votre contrôleur de vue en utilisant -animateAlongsideTransition:completion:
La réponse était un peu cachée; vous avez dû cliquer dans la barre latérale de documentation pour finalement trouver ce document fantastique .
Les widgets ont leurs hauteurs ajustées par le système. Si vous avez défini votre hauteur à l'aide de contraintes, celle-ci sera automatiquement ajustée selon les besoins. Si vous utilisez une disposition explicite, vous pouvez demander une nouvelle hauteur en modifiant le preferredContentSize
de votre widget.
Notez que vous n'avez aucune garantie que le centre de notification respectera votre demande de hauteur: il peut être ajusté automatiquement, il peut être ajusté mais pas à la hauteur exacte que vous souhaitez, ou il peut ne pas être honoré du tout.
La meilleure façon de développer un widget est d'utiliser des contraintes de mise en page automatique pour définir vos valeurs de hauteur, de sorte que votre widget s'adaptera facilement à différentes hauteurs.
Depuis la hauteur de l'extension iOS 10 est de 110 pixels. Vous devez utiliser une nouvelle méthode de protocole widgetActiveDisplayModeDidChange:withMaximumSize:
pour étendre la taille de l'extension (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;
}
}
Vous devrez peut-être également appeler setWidgetLargestAvailableDisplayMode:
sur le contexte de votre extension dans la méthode viewDidLoad
du contrôleur de vue actuelle comme celle-ci (Objective-C):
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
Ce fil peut être utile https://forums.developer.Apple.com/thread/489
La meilleure façon est bien sûr Autolayout mais par défaut il y a des marges que vous pouvez contrôler comme ça
func widgetMarginInsetsForProposedMarginInsets
(defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
return UIEdgeInsetsZero
}
Il existe deux façons d'afficher l'extension Aujourd'hui:
Quel que soit le code que vous faites pour modifier la hauteur d'extension en mode Compact, cela ne fera aucune différence. Vous devez donc changer le mode du mode compact au mode Expand.
// 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 référer WWDC pour plus de mises à jour sur les extensions d'application
Widget d'aujourd'hui par défaut UIEdgeInsets defaultMarginInsets (UIEdgeInsets) defaultMarginInsets = (haut = 0, gauche = 44, bas = 39, droite = 0)
Vous devez ajouter cette méthode
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}