2016-08-29 22 views
14

Staram się zmienić wysokość mojego widgetu iOS 10 w trybie kompaktowym.Dzisiejsze rozszerzenie trybu kompaktowego wysokość w iOS 10

Wszystko, co mam, to pusty widget, bez widoków w nim. Mimo to, bez względu na to, co ustawiłem dla kompaktowej wysokości, zdaje się to ignorować.

Oto mój kod:

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

Czy może to być problem z oprogramowania w wersji beta? Ja na Xcode 8 beta i iOS 10 beta 7.

+0

Wysokość w trybie kompaktowym nie może być nic innego niż to, co z 110 móc powiedzieć. – dan

+0

Ale jak działają inne aplikacje na iOS 10, o rozmiarach mniejszych niż 110? –

+4

Wszystkie aplikacje Apple mają 110 wysokości w trybie kompaktowym, co mogę powiedzieć. Każda firma zewnętrzna, którą posiadasz, została stworzona dla systemu iOS 9, więc jej rozszerzenia zostały utworzone przed pojawieniem się różnych trybów wyświetlania i będą działać tak samo, jak w iOS 9. – dan

Odpowiedz

19

Zgodnie z sesją What's new in Cocoa Touch z WWDC 2016 (około godziny 44:00):

Teraz mamy rozmiar kontrolowany przez użytkownika. Tryb kompaktowy, który jest stała wysokość i rozszerzony tryb, który ma zmienną wysokość.

Więc wydaje się, że ustawienie prefferedContentSize dla NCWidgetDisplayModeCompact jest całkowicie ignorowane (nieruchoma wielkość wydaje się być 110pts).

+0

Nie jest całkowicie ignorowane. Zauważam, że nadal musisz ustawić prefferedContentSize w widgetActiveDisplayModeDidChange, gdy activeDisplayMode stanie się zwarty. W przeciwnym razie łamie funkcję "pokaż więcej/mniej". – jesse

7

1) ustalenia trybu wyświetlania na NCWidgetDisplayModeExpanded w viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded 
} 

2) wdrożenie tej metody protocol

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

Aby uzyskać więcej informacji https://forums.developer.apple.com/message/144158#144158 –

+7

Zasadniczo, kopia wkleiła moje pytanie i przetłumaczyła je na szybki –

+0

@ BalázsVincze Działa dla mnie z powyższym kodem. Załączono zrzut ekranu w celach informacyjnych. –

0

zestaw prefferedContentSize w viewDidAppear lub po tym. Chyba ten widget zmieni rozmiar przed wyświetleniem widoku. Szerokość widżetu NIE JEST SCREEN_WIDTH z powodu przerwy między krawędzią ekranu iPhone'a.

3

W SWIFT 3:

Następująca nieruchomość za TodayViewController powróci maksymalny rozmiar dla trybu kompaktowego:

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