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

我正在努力改变在紧凑模式下我的iOS 10 widget的高度。

我所拥有的只是一个空的小部件,里面没有任何视图。 不过,无论我为紧凑的高度设置,似乎忽略它。

这是我的代码:

- (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); } } 

这可能是testing版软件的问题吗? 我在Xcode 8 beta和iOS 10 beta 7上。

根据2016年WWDC发布的Cocoa Touch新内容 (大约44:00标记):

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

所以,似乎NCWidgetDisplayModeCompact设置完全被忽略(固定大小似乎是110pts)。

1)将显示模式设置为viewDidLoad NCWidgetDisplayModeExpanded

 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

在SWIFT 3中:

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

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

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