17

我正在努力在紧凑模式下更改我的 iOS 10 小部件的高度。

我只有一个空的小部件,里面没有视图。尽管如此,无论我为紧凑高度设置什么,它似乎都忽略了它。

这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];

}

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = CGSizeMake(0, 50);
    }
    else{
        self.preferredContentSize = CGSizeMake(0, 200);
    }
}

这可能是测试版软件的问题吗?我正在使用 Xcode 8 beta 和 iOS 10 beta 7。

4

4 回答 4

21

根据WWDC 2016的 Cocoa Touch 中的新增功能(大约 44:00 标记):

现在我们有一个用户控制的大小。固定高度的紧凑模式和可变高度的扩展模式。

因此,似乎完全忽略了设置 a preferredContentSizefor NCWidgetDisplayModeCompact(固定大小似乎是 110pts)。

于 2016-09-09T15:51:31.013 回答
8

在 SWIFT 3 中:

TodayViewController 的以下属性将返回紧凑模式的最大大小:

private var maxSizeForCompactMode: CGFloat {
    return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}
于 2017-05-10T11:47:11.480 回答
7

1) 将显示模式设置为NCWidgetDisplayModeExpandedinviewDidLoad

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 {
        self.preferredContentSize = CGSize(width: 0, height: 200);
    }
}

iOS 10 小部件

于 2016-08-29T10:26:47.307 回答
0

在那prefferedContentSize之后viewDidAppear或之后。我猜这个小部件会在视图出现之前调整大小。由于 iPhone 屏幕边缘之间的间隙,小部件的宽度不是 SCREEN_WIDTH。

于 2017-03-07T12:35:00.237 回答