2012-03-08 15 views
17

Kompilowanie aplikacji na iPada z pakietem SDK 5.1 (wersja release) powoduje, że UIPopoverController wyświetla się za pomocą nowego "slajdu" z lewej prezentacji. To całkowicie niszczy moją prezentację popover, która polegała na posiadaniu "czarnego" nagłówka stylu i określonej wysokości. Próbowałem ustawić presentsWithGesture na NO, ale to tylko wydaje się wyłączać gest machnięcia i nie zatrzymuje styl prezentacji.Kompilowanie przeciwko 5.1 SDK wymusza nową operację UIPopoverController "wsuwanie" prezentacji popovers - jak wyłączyć?

Ta sama aplikacja bez ponownej kompilacji, ale działająca na iOS 5.1, używa starego stylu prezentacji popover. Tak więc wiem, że iOS 5.1 nadal obsługuje metodę kompatybilną wstecz. Jak mogę aktywować starą prezentację popover?

To jest naprawdę ważne dla mojej aplikacji, niestety.

Jeśli to nie możliwe, czy istnieje sposób na uzyskanie nagłówka w stylu "czarnym" w nowych aplikacjach?


Chociaż mam UISplitViewController w mojej aplikacji, nie jest odpowiedzialny za wyświetlanie popover. Zamiast tego, używam tego kodu:

[self.popoverController presentPopoverFromRect:ipadButtonMenu.frame 
              inView:self.view 
         permittedArrowDirections:UIPopoverArrowDirectionUp 
             animated:YES]; 

To pytanie jest cross-post od dewelopera forum Apple, here. Mam nadzieję, że ktoś ma odpowiedź.


Oczekiwany prezentacja: enter image description here

Prezentacja po kompilacji pod iOS 5.1 SDK: enter image description here

+0

To jest jakiś potężny grzywny UI designin' mojego przyjaciela! Czy miałeś okazję wyczyścić swoją kompilację i skompilować od zera? Zgłosiłbym radar, ponieważ twitter zdaje się wysadzać w powietrze z tym samym problemem, z którym stoisz. – CodaFi

+0

Tak, clean/rebuild nie ma na to wpływu. Ktoś konkretny na Twitterze, o którym mówisz, mówi o tym? –

+0

Krótkie podsumowanie: https://mobile.twitter.com/nimaa/status/156521684512415746 – CodaFi

Odpowiedz

5

Zmiana ta wydaje się źle przemyślane. Jasne, łamiemy wszystko w widoku szczegółów, który używa przesunięcia. Niesamowite!

Aby odpowiedzieć na pytanie "przywróć czarne", jeśli jest to tylko kwestia koloru górnego paska nawigacyjnego, można użyć serwera proxy wyglądu. Na przykład:

[[UINavigationBar appearance] setTintColor:[UIColor blackColor]]; 

Proxy wyglądu można ustawić bardzo dokładnie, jeśli to konieczne; ma model kontenerów. Jest na nim bardzo dobry film WWDC.

Jeśli chodzi o powrót do starego zachowania z nowym kompilatorem, szczerze chciałbym wiedzieć również. Nowe zachowanie powoduje również rozbijanie arkuszy akcji w widoku głównym; wcześniej, gdy widok główny był prezentowany w popover, zrobili to, co trzeba. Teraz jest to asercja.

+0

'setTintColor' może działać jako ostateczność - dzięki za to. Niestety, wysokość popover ('contentSizeForViewInPopover') jest również bardzo ważna dla tej aplikacji i wydaje się, że całkowicie zepsuło to zachowanie. –

+0

Ponieważ powrót do starego zachowania nie wydaje się możliwy, zrezygnowałem z tego, aby poprawić wygląd. Twoja odpowiedź uczyniła to możliwym, więc zaznaczam to jako odpowiedź. –

+0

Witam, czy przypadkiem nie wymyśliłeś sposobu na przywrócenie efektu popover w systemie iOS 5.1? – CocoaEv

0

Ok miałem ten sam problem, może to pomóc, usuwa czarne tło, które dociera do dolnej części ekranu ....

nazywają to po wyświetlać swoje popoup ...

- (void)removeInnerShadow { 
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; 
    for (UIView *windowSubView in window.subviews) { 

      if ([NSStringFromClass([windowSubView class]) isEqualToString:@"UIDimmingView"]) { 
      for (UIView *dimmingViewSubviews in windowSubView.subviews) { 

       for (UIView *popoverSubview in dimmingViewSubviews.subviews) { 

        popoverSubview.layer.shadowOpacity=0; 
        popoverSubview.layer.masksToBounds = NO; 

        if([NSStringFromClass([popoverSubview class]) isEqualToString:@"_UIPopoverSlidingChromeView"]) 
        { 

         popoverSubview.layer.shadowOpacity=0; 
         popoverSubview.layer.masksToBounds = NO; 

        } 
       } 
      } 
     } 
    } 
} 
0

Możliwe jest cofnięcie! - z MGSplitViewController. Daje podobny interfejs API do sterowania iOS, ale ze starym popover i znacznie większą kontrolą.

0

od iOS 5.1

Od docs:

w iOS 5.1, klasa UISplitViewController przyjmuje przesuwne styl prezentacji podczas prezentacji lewym widoku (wcześniej widziałem tylko w programie Mail). Ten styl jest używany, gdy prezentacja jest inicjowana przez istniejący element przycisku paska dostarczony przez metody delegatów lub przez gest przesuwania w prawym widoku. W celu uzyskania tego zachowania nie jest wymagane żadne dodatkowe zastosowanie interfejsu API, a wszystkie istniejące interfejsy API, w tym instancja UIPopoverController udostępniona przez delegowanego, będą działały jak dotychczas.

mały obejść nad here ->