2009-07-06 8 views
9

Mam niestandardowy UINavigationController, który obsługuje automatyczne obracanie. Mam również UIDatePicker w jednym z moich widoków, które rzuca na stos kontrolera nawigacyjnego. Automatyczne obracanie działa, gdy zacznę przeglądać widok daty w pionie, a następnie go obracać. Jeśli spróbuję załadować widok wyboru daty w pejzażu na początek, widok jest cały pomieszany. Wygląda na to, że nie obsługuje rotacji, a ramka ma tylko połowę selektora widocznego i poza środkiem.Ładowanie UIDatePicker w pejzażu na UINavigationController

Próbowałem już zrobić własny selektor dat, który obsługuje automatyczne obracanie w przypadku, w którym był problem, próbowałem tworzyć dwa różne widoki i zamieniać je, i próbowałem zmienić rozmiar ramki widoku na Metoda ViewWillAppear. Żadne z nich nie wydaje się pracować dla mnie jak dotąd.

Ktoś ma jakieś sugestie, jak ustawić, aby selektor daty pojawiał się prawidłowo na kontrolerze nawigacyjnym? Prawdopodobnie przeoczyłem coś prostego, a odpowiedź jest tuż przede mną, ale nie znajduję tego.

Odpowiedz

0

Naprawiłem to. Udało mi się sprawdzić, jaka jest orientacja, a następnie usunąć selektor dat i kod, ponownie utworzyłem selektor dat i dodałem go. To działało, nie było piękne, ale działało.

+1

Co pewien czas nie wyświetla się poprawnie, jeśli urządzenie znajduje się już w orientacji poziomej, gdy kontroler podglądu jest ładowany ze stalówki. Więc twoja poprawka do odtworzenia kontroli ma sens, ale znalazłem ładniejszą poprawkę, zobacz moją odpowiedź. – progrmr

0

Dodaj selektor daty do widoku, który został automatycznie obrócony (widok kontrolera, a nie bezpośrednio w oknie).

Set self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

13

wpadłem na ten sam problem. Po załadowaniu widoku w orientacji poziomej program UIPicker nie jest renderowany poprawnie. Spędziłem kilka godzin próbując znaleźć obejście, dopóki nie znalazłem poprawki od this page from Llamagraphics. Dodać ten kod w viewDidLoad kontrolera widoku, który ma próbnika:

for (UIView* subview in myPicker.subviews) { 
    subview.frame = myPicker.bounds; 
} 

Odwiedź webpage więcej szczegółów. Dziękuję Stuart!

+0

To działa świetnie! – morais

+0

Dzięki! Spędziłem godziny próbując rozwiązać ten problem! – Nathan

+0

Wspaniałe i proste rozwiązanie. To było naprawdę denerwujące, dzięki! – MystikSpiral

0

Oto, co sprawdziło się u mnie. Kiedy tworzę datepicker, robię to, że to jest w trybie portretowym:

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait animated: NO]; 
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero]; 
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO]; 

Więc zasadniczo zmienić orientację utwórz datepicker i zmienić orientację z powrotem od razu do tego, co było wcześniej. Ustawię szerokość selektora (szerokość ekranu) i wysokość (216) w innym miejscu.

Mam tę wskazówkę z innej strony.

0

Miałem ten sam problem z wyświetlaniem wyboru daty (w trybie timera) skalibrowanym poziomo na iPadzie. Nie mogłem znaleźć żadnego ze znanych rozwiązań tego błędu, więc naprawiłem to brzydkim hackem, który wymagał wstawienia dwóch datepickerów - jeden jest zmieniany w tle, a drugi w standardowym rozmiarze (320px) na pierwszym planie ... Wiem, brzmi chory, ale wyświetla się prawidłowo i to się liczy. To i tak wina Apple'a;)

1

Poniższy kod będzie działał zarówno w trybie pionowym, jak i poziomym. W tym celu musisz tak ustawić poniższą ramkę widoku tabeli: -

_dateTableViewCell=[self.tableView dequeueReusableCellWithIdentifier:@"DatePickerCell"]; 
if (self.dateTableViewCell==nil) 
{ 
    CGRect rect; 
    self.dateTableViewCell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DatePickerCell"]; 
    UIDatePicker *datePicker=[[UIDatePicker alloc]initWithFrame:frame]; 
    datePicker.datePickerMode=UIDatePickerModeDateAndTime; 
    datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    CGRect cellRect = self.dateTableViewCell.frame; 
    cellRect.size.height = 216; 
    self.dateTableViewCell.frame = cellRect; 
    CGRect startRect = self.dateTableViewCell.frame; 
    startRect.origin.x = 0.0; 
    datePicker.frame = startRect; 
    [self.dateTableViewCell.contentView addSubview:datePicker]; 
}