2016-11-05 75 views
4

我正在尋找以編程方式更改今日擴展的高度。正如iOS10 SDSK的介紹NCWidgetDisplayMode我試圖用它來以編程方式更改我的preferredContentSize的高度。在IOS10 Widget中以編程方式更改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 10Show More/Show Less按鈕在Today's Extension中自動提供。所以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,這不是必需的。

您可以參考https://github.com/pgpt10/Today-WidgetToday's Widget實施iOS 8iOS 9iOS 10