2016-08-29 58 views
14

我正在努力改变我的iOS 10在紧凑模式下的高度。今天扩展在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个β和iOS 10测试7.

+0

在紧凑模式的高度不能超过110以外的任何东西我可以告诉。 – dan

+0

但是其他应用程序如何在iOS 10上使用,尺寸小于110? –

+4

从我所知道的所有苹果的应用程序在紧凑模式下有110高度。您拥有的任何第三方应用程序都是为iOS 9构建的,因此它们的扩展程序是在不同显示模式存在之前构建的,并且会继续与iOS 9中的相同。 – dan

回答

19

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

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

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

+0

它并没有被完全忽略。我注意到,当activeDisplayMode变得紧凑时,您仍然必须在widgetActiveDisplayModeDidChange中设置prefferedContentSize。否则,它会打破“显示更多/更少”的功能。 – jesse

7

1)设定的显示模式,在NCWidgetDisplayModeExpandedviewDidLoad

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

+0

欲了解更多信息https://forums.developer.apple.com/message/144158#144158 –

+7

基本上,你复制粘贴我的问题,并将其翻译成swift –

+0

@BalázsVincze它用上面给出的代码为我工作。附上截图供参考。 –

0

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

3

在SWIFT 3:

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

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