2016-11-05 5 views
4

Ich bin dabei, programmatisch die Höhe einer heutigen Erweiterung zu ändern. Als das iOS10 SDSK eingeführt NCWidgetDisplayMode Ich versuche, es zu verwenden, um die Höhe meiner preferredContentSize programmgesteuert zu ändern.Ändern Sie NCWidgetDisplayMode programmgesteuert in IOS10 Widget

Ich habe implementiert 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) 
    } 
} 

ich das Widget Höhe erweitern möchten, wenn ein UIButton gedrückt wird:

@IBAction func multiplybyonethousand (sender: AnyObject) { 

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

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

Allerdings, wenn ich meinen Code ausführen, wird die Höhe der heutigen Erweiterung nicht ändern und die Konsole gibt mir den folgenden Fehler:

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

Ich habe versucht, widgetActiveDisplayModeDidChange innerhalb einer Animation Block zu nennen:

@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 
      } 
     } 
} 

Aber ich immer noch die No active animation block! Fehlermeldung. Gibt es eine Möglichkeit, eine heutige Erweiterungsansicht in iOS10 programmatisch zu erweitern?

Antwort

9

In iOS 10, Show More/Show Less Schaltfläche wird automatisch in der Today's Extension bereitgestellt. So wird die Höhe der widget automatisch durch NCWidgetDisplayMode behandelt. Sie müssen keine explizite Schaltfläche zum Bearbeiten der Höhe des Widgets angeben.

override func viewDidLoad() { 
    super.viewDidLoad() 

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

Methode NCWidgetProviding Protokolls implementieren:

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

In, iOS 8 und iOS 9, müssen Sie explizit Widget Höhe behandeln. In iOS 10 ist es nicht erforderlich.

Sie können in iOS 8, iOS 9 und iOS 10-https://github.com/pgpt10/Today-Widget auf Today's Widget Umsetzung beziehen.

Verwandte Themen