2014-09-26 19 views
7

Chciałem zmienić rozmiar UIView, mój kod działa idealnie w systemie iOS 7.1, ale gdy uruchomię go w systemie iOS 8, nie działał poprawnie (Wyjaśnię poniżej).Animacja UIView próbująca zmienić rozmiar ramki nie działa w systemie iOS 8, ale w systemie iOS 7

Mam UIView int serii ujęć z wartościami (0,67,511,320), chcę, aby zmienić rozmiar na pełnym ekranie iPada, więc dodałem poniższy kod:

 [UIView animateWithDuration:0.5 animations:^{ 

      CGRect frame = containerView.frame; 
      frame.origin.x = 0; 
      frame.origin.y = 67; 
      frame.size.height = 643; 
      frame.size.width = 1024; 
      containerView.frame = frame; 
      ... 

     }completion:^(BOOL finished) { 
      ... 
     }]; 

chciałem coś takiego:

_________________________________ 
|   |      | 
|   |      | 
|  A  |      | 
|___________|      | 
|         | 
|    BACKGROUND  | 
|         | 
|         | 
|_________________________________| 

       | 
       V 
_________________________________ 
|         | 
|         | 
|         | 
|    A     | 
|         | 
|         | 
|         | 
|         | 
|_________________________________| 

ale zaczyna animację jak (0,67,0,0) do (0,67,511,320)

Wszelkie pojęcia o tym, co się dzieje? Lub alternatywa?

+0

pamiętać, że nie trzeba się ramkę z 'containerView.frame' podczas nadpisywania wszystkich członków, jak to zrobić. – Aaganrmu

+0

Tak, wiem, dziękuję za radę. –

Odpowiedz

17

należy wyłączyć pregenerated ograniczeń. Najprostszym sposobem jest użycie maski automatycznej zamiast ograniczeń do animowania widoku.

containerView.translatesAutoresizingMaskIntoConstraints = YES; 

Możesz umieścić ten kod do swojej metody -viewDidLoad lub tuż nad [UIView animateWithDuration:...

+0

co powinno być contrainerView, jeśli mam scrollview i uiview wewnątrz przewijania i animacje dzieje się w tym uiview. Czy to byłby ten uiview? – coolcool1994

4

jest włączone autolayout? może w iOS 8 pewne dodatkowe ogranicza dodajesz podczas kompilacji czasu

spróbować zadzwonić [self.view layoutIfNeeded]; w bloku animatin po kodzie samej animacji

UPDATE

__block CGRect frame = containerView.frame; 
frame.origin.x = 0; 
frame.origin.y = 67; 
frame.size.height = 643; 
frame.size.width = 1024; 

[UIView animateWithDuration:0.5 animations:^{ 

     containerView.frame = frame; 
     ... 

    }completion:^(BOOL finished) { 
     ... 
    }]; 
+0

Dodaję moje widoki do storyboardu, jak mogę to wyłączyć? –

+0

Czy [self.view layoutIfNeeded] pomógł? Zobacz też, jak animować widok za pomocą constrints http://stackoverflow.com/questions/17626802/animating-uiview-frame-with-constraints – Roma

+0

Nie, animacja nie została wyświetlona, ​​jeśli jej używam:/ –

Powiązane problemy