今天在iOS 10中扩展紧凑模式高度

时间:2016-08-29 09:47:07

标签: ios objective-c ios10 ios10-today-widget

我正在努力在紧凑模式下更改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 个答案:

答案 0 :(得分:20)

根据2016年WWDC的What's new in Cocoa Touch会议(大约44:00):

  

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

因此,似乎完全忽略为preferredContentSize设置NCWidgetDisplayModeCompact(固定大小似乎为110pts)。

答案 1 :(得分:7)

1)将显示模式设置为NCWidgetDisplayModeExpanded

中的viewDidLoad
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 Widget

答案 2 :(得分:6)

在SWIFT 3中:

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

private var maxSizeForCompactMode: CGFloat {
    return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}

答案 3 :(得分:0)

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