在 IOS10 Widget 中以编程方式更改 NCWidgetDisplayMode
Change NCWidgetDisplayMode programmatically in IOS10 Widget
我希望以编程方式更改今日扩展的高度。由于 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!
我试过在动画块中调用 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
中,Show 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 8
和iOS 9
中,您需要显式处理widget的高度。在iOS 10
中不需要。
您可以参考 https://github.com/pgpt10/Today-Widget 在 iOS 8
、iOS 9
和 iOS 10
中的 Today's Widget
实现。
我希望以编程方式更改今日扩展的高度。由于 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!
我试过在动画块中调用 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
中,Show 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 8
和iOS 9
中,您需要显式处理widget的高度。在iOS 10
中不需要。
您可以参考 https://github.com/pgpt10/Today-Widget 在 iOS 8
、iOS 9
和 iOS 10
中的 Today's Widget
实现。