2016-08-29 99 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 
}