2016-11-05 2 views
4

Je cherche à modifier par programme la hauteur d'une extension aujourd'hui. Comme l'iOS10 SDSK a présenté NCWidgetDisplayMode j'essaye de l'employer pour changer par programme la taille de mon preferredContentSize.Modifier NCWidgetDisplayMode par programme dans IOS10 Widget

J'ai mis en widgetActiveDisplayModeDidChange:

@available(iOSApplicationExtension 10.0, *) 
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { 
    if (activeDisplayMode == NCWidgetDisplayMode.Compact) { 
     self.preferredContentSize = maxSize 
    } 
    else { 
     self.preferredContentSize = CGSize(width: maxSize.width, height: 280) 
    } 
} 

Je veux la hauteur de widget pour développer lorsqu'un UIButton est pressé:

@IBAction func multiplybyonethousand (sender: AnyObject) { 

    if self.extensionContext?.widgetActiveDisplayMode == NCWidgetDisplayMode.Compact { 

     self.widgetActiveDisplayModeDidChange(.Expanded, withMaximumSize: CGSizeMake(0, 300)) 
    } 
} 

Cependant quand je lance mon code, la hauteur de l'extension aujourd'hui fait pas changer et la console me donne l'erreur suivante:

2016-11-05 14:24:29.425697 todayextension[28590:7222420] No active animation block! 

J'ai essayé d'appeler widgetActiveDisplayModeDidChange l'intérieur d'un bloc d'animation:

@IBAction func multiplybyonethousand (sender: AnyObject) { 
     if self.extensionContext?.widgetActiveDisplayMode == NCWidgetDisplayMode.Compact { 
      UIView.animateWithDuration(0.2, delay: 0, options: .CurveLinear, animations: {() -> Void in 
       self.widgetActiveDisplayModeDidChange(.Expanded, withMaximumSize: CGSizeMake(0, 300)) 

      }) { (completed) -> Void in 
      //Do Stuff 
      } 
     } 
} 

mais je reçois toujours le message d'erreur No active animation block!. Existe-t-il un moyen d'étendre par programmation une vue d'extension d'aujourd'hui dans iOS10?

Répondre

9

Le bouton iOS 10, Show More/Show Less est automatiquement fourni dans le Today's Extension. Donc, la hauteur de la widget est traitée automatiquement par NCWidgetDisplayMode. Vous n'avez pas besoin de fournir un bouton explicite pour gérer la hauteur du widget.

override func viewDidLoad() { 
    super.viewDidLoad() 

    if #available(iOSApplicationExtension 10.0, *) { 
     self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded 
    } 
} 

Mettre en oeuvre la méthode de NCWidgetProviding protocole:

@available(iOSApplicationExtension 10.0, *) 
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { 
    if activeDisplayMode == .expanded { 
      preferredContentSize = CGSize(width: maxSize.width, height: 300) 
    } else { 
     preferredContentSize = maxSize 
    } 
} 

Dans, iOS 8 et iOS 9, vous devez gérer explicitement la hauteur de Bidule. Dans iOS 10, il n'est pas nécessaire.

Vous pouvez consulter https://github.com/pgpt10/Today-Widget sur Today's Widget mise en œuvre iOS 8, iOS 9 et iOS 10.