今天的扩展程序:如何处理显示模式?

9

小部件现在包括显示模式的概念(由NCWidgetDisplayMode表示),它让你描述有多少内容可用并允许用户选择紧凑或扩展视图。

如何在iOS 10.0中展开小部件?它与iOS 9中不同。

2个回答

49

好的,我找到了正确的解决方案这里

1)在viewDidLoad中首先将显示模式设置为NCWidgetDisplayMode.expanded

override func viewDidLoad() {
    super.viewDidLoad()
    self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}

2) 实现新的协议方法:

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if (activeDisplayMode == NCWidgetDisplayMode.compact) {
        self.preferredContentSize = maxSize
    }
    else {
        //expanded
        self.preferredContentSize = CGSize(width: maxSize.width, height: 200)
    }
}

它将作为官方应用程序运行。

图片


2
我正在尝试这样做,以便将小部件设置为我的表视图的高度,但它总是作为.compact传递到widgetActiveDisplayModeDidChange,即使我将extensionContext设置为expanded。有什么想法为什么显示模式没有被设置? - fakataha
viewDidLoad代码片段并没有将模式设置为.expanded,它只是使其可用(默认模式是.compact)。 - undefined

8
这是一个Objective-C示例。
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
                         withMaximumSize:(CGSize)maxSize
{
    if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = maxSize;
    }
    else {
        self.preferredContentSize = CGSizeMake(0, 200);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接