2016-11-05 8 views
4

今日の拡張機能の高さをプログラムで変更したいと考えています。 iOS10 SDSKがNCWidgetDisplayModeを導入したので、私はそれを使用してプログラムで高さを変更しようとしています。preferredContentSizeIOS10ウィジェットでNCWidgetDisplayModeをプログラム的に変更

私は 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) 
    } 
} 

私はUIButtonが押されたときにウィジェットの高さを拡張したい:

@IBAction func multiplybyonethousand (sender: AnyObject) { 

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

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

私は自分のコードを実行したときしかし、今日の拡張子の高さがありませんコンソールは私に次のエラーを与えます:

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

私は、アニメーションブロック内widgetActiveDisplayModeDidChangeを呼び出そうとしています:

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

しかし、私はまだNo active animation block!エラーメッセージが表示されます。 iOS10で今日の拡張機能ビューをプログラムで拡張する方法はありますか?

答えて

9

iOS 10では、にはボタンが自動的に表示されます。したがって、widgetの高さはNCWidgetDisplayModeによって自動的に処理されます。ウィジェットの高さを処理するための明示的なボタンを用意する必要はありません。

override func viewDidLoad() { 
    super.viewDidLoad() 

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

NCWidgetProvidingプロトコルのメソッドを実装:

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

で、iOS 8iOS 9を、明示的ウィジェットの高さを処理する必要があります。 iOS 10では必須ではありません。

あなたはiOS 8iOS 9iOS 10Today's Widget実装にhttps://github.com/pgpt10/Today-Widgetを参照することができます。

関連する問題