在IOS10 Widget中以编程方式更改NCWidgetDisplayMode
我期待以编程方式更改今天的扩展的高度。 由于iOS10 SDSK引入了NCWidgetDisplayMode
我试图用它来以编程方式更改我的preferredContentSize
的高度。
我已经实现了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!
我试图在animation块内调用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中以编程方式展开今天的扩展视图?
在iOS 10
,“ Today's Extension
中将自动提供“ Show More/Show Less
button。 所以widget
高度是通过NCWidgetDisplayMode
自动处理的。 您不需要提供任何明确的button来处理小部件的高度。
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 8
和iOS 9
,您需要明确处理小部件的高度。 在iOS 10
,这不是必需的。
您可以参考https://github.com/pgpt10/Today-Widget了解如何在iOS 8
, iOS 9
和iOS 10
实现Today's Widget
。