J'ai du mal à changer la hauteur de mon widget iOS 10 en mode compact.
Tout ce que j'ai est un widget vide, aucune vue à l'intérieur. Malgré tout, peu importe ce que je mets pour la hauteur compacte, il semble l’ignorer.
Voici mon code:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = CGSizeMake(0, 50);
}
else{
self.preferredContentSize = CGSizeMake(0, 200);
}
}
Cela pourrait-il être un problème avec le logiciel bêta? Je suis sur Xcode 8 beta et iOS 10 beta 7.
Selon le Quoi de neuf dans Cocoa Touch session de WWDC 2016 (autour de 44:00):
Nous avons maintenant une taille contrôlée par l'utilisateur. Le mode compact, qui est hauteur fixe et le mode étendu, qui est à hauteur variable.
Il semble donc que définir preferredContentSize
pour NCWidgetDisplayModeCompact
soit complètement ignoré (la taille fixe semble être de 110pts).
1) Définissez le mode d’affichage sur NCWidgetDisplayModeExpanded
dans viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}
2) Implémenter cette méthode de protocole
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
self.preferredContentSize = maxSize;
}
else {
self.preferredContentSize = CGSize(width: 0, height: 200);
}
}
Dans Swift 3:
La propriété suivante pour votre TodayViewController retournera la taille maximale en mode compact:
private var maxSizeForCompactMode: CGFloat {
return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}
définissez prefferedContentSize
dans viewDidAppear
ou après. Je suppose que ce widget sera redimensionné avant que la vue apparaisse. La largeur du widget n'est PAS SCREEN_WIDTH en raison de l'écart entre l'écran de l'iPhone et Edge.