web-dev-qa-db-fra.com

Hauteur du mode compact Today Extension dans iOS 10

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.

15
Balázs Vincze

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

20
spassas

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

 iOS 10 Widget

7
Pranay U

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.

0
iamhite