2013-09-22 8 views
7

Używam UIPopoverController do otwierania okna. Używam preferredContentSize do ustawienia rozmiaru. Następnie używam Push nowy kontroler widoku o większym rozmiarze. Kiedy pojawia się widok podrzędny, chcę przywrócić okno do oryginalnego rozmiaru. Ale wydaje się nie działać.preferredContentSize nie kurczy się

Już wstawiłem self.preferredContentSize = myWindowSize; Ale wydaje się, że nie może odzyskać.

W systemie iOS6 lub wcześniej ustawię contentSizeForViewInPopover na CGSizeZero, a następnie ustaw prawidłowy rozmiar. Ale na iOS7 sprawi, że okienko zniknie.

Odpowiedz

0

Jedyne rozwiązanie, jakie mogę sobie wyobrazić, to odrzucenie okna popover i automatyczne zaprezentowanie go w nowym rozmiarze. Mam też problem z systemem iOS 8, w którym rozmiar zawartości nie zmniejsza się. Szerokość kurczy się, ale wysokość może tylko dla mnie wzrosnąć.

Wystarczy popatrzeć na

https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverController:willRepositionPopoverToRect:inView:

To może pomóc zmienić położenie rect z protokołem delegata

Rozwiązanie:

Ok, oto moje rozwiązanie. Z kontrolera widoku, w którym prezentujesz kontroler popover, możesz skonfigurować delegata o nazwie "resetContentSize: (CGSize) size". na przykład w pliku nagłówka Twojego przedstawiając widok kontrolera:

@protocol PopoverDelegate <NSObject> 
- (void)resetContentSize:(CGSize)size 
@end 

w pliku wdrażania którym przedstawi kontroler popover można ustawić delegata

self.popoverController.delegate = self; 

Od kontrolera popover, można dodać PopoverDelegate w plik nagłówka

@property (nonatomic, weak) id<PopoverDelegate> popoverDelegate; 

i wywołać metodę delegata w pliku wdrażania:

[popoverDelegate resetContentSize:CGSizeMake(320.0f,205.0f)]; 
3

to rozwiązać to dla mnie:

override func viewDidAppear(animated: Bool) 
{ 
    navigationController?.preferredContentSize = preferredContentSize 
    super.viewDidAppear(animated) 
}