2013-08-08 16 views
5

Mam problem z ustaleniem tego problemu na moim wyglądzie uiscroll. Zawartość wewnątrz widoku uiscroll up przesuwa się w górę po kliknięciu przycisku, aby przesunąć nowy kontroler widoku na ekran, a następnie powrócić do oryginalnego kontrolera widoku. Zwróć uwagę, jak zmienia się górny widok przewijania.UIScrollview przesuwanie zawartości w górę po przewinięciu w dół i przesuwanie nowego kontrolera podglądu

enter image description hereenter image description here

Oto kod na Scrollview

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    [scroll setScrollEnabled:YES]; 
    [scroll setContentSize:CGSizeMake(923, 934)]; 
    [self.view addSubview:scroll]; 
} 
+0

napisać to w - (void) viewDidAppear: (Bool) animowany metody [Scrollview setContentOffset: CGPointMake (0,0) animowany: YES]; – CRDave

+0

Kiedy to zrobię, widok uiscrollview zostanie wyświetlony u góry, ale wszystko jest nadal przesunięte w górę (górna część treści jest nadal poza zasięgiem widoku). – Alexyuiop

+0

właśnie zauważyłem, że może to wydawać się mylące dla innych, więc dodałem nowe zdjęcia zmiany – Alexyuiop

Odpowiedz

4

I rozwiązać problem

-(void)viewWillAppear:(BOOL)animated{ 

    [scroll setContentOffset:CGPointMake(0,0)]; 

} 
3

Myślę, że to ze względu na sposób, że autoLayout odbywa się podczas tworzenia widoków. Z jakiegoś powodu, kiedy po raz pierwszy dodajesz widok do ekranu (widok przewijania), współrzędne tego widoku nie mieszczą się pod paskiem nawigacji, ale po dodaniu innego widoku, robią to. Jednym ze sposobów obejścia tego problemu jest utworzenie pustego widoku i dodanie go jako podglądu przed dodaniem scrollView.

Takich jak:

UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)] 
[vi setBackgroundColor:[UIColor clearColor]]; 
[self.view addSubview:vi]; 
//Then add scrollView 

To właśnie tworzy poza ekranem 1x1 widoczność i dodaje go do widoku głównego, który sprawia, że ​​główny widok prawidłowo zlokalizować się przed dodaniem Scrollview.

Możesz także chcieć zmienić współrzędną y swojego scrollView, ponieważ dzięki temu przy aktualnym kodzie sprawisz, że zawsze będzie zachowywał się tak jak w drugim przypadku.

zwykle zrobić:

frame.y+=self.navigationController.navigationBar.frame.size.height + 20; 

który dodaje nawigację wysokość bar i wysokość paska stanu (20).

+0

Kiedy robię scroll.frame.origin.y + = self.navigationController.navigationBar.frame.size.height + 20; daje mi błąd "Wyrażenie nie jest przypisywane" – Alexyuiop

+0

Nie musisz tego robić, ale kiedy utworzysz scrollView, dodaj tę liczbę do tego, jaka byłaby. – Jsdodgers

+0

Ale czy to nie przesuwa całej rzeczy o 20, kiedy się ładuje? Mam tylko ten problem z przesunięciem po przewijaniu w dół, a następnie naciśnij nowy kontroler widoku. Początkowo widok przewijania zawsze ładuje się dobrze, ale dopiero po przewinięciu w dół, przesuwaniu widoków, a następnie cofaniu, cała ta zmiana przesuwa się – Alexyuiop

1

na pierwszy użyłem odpowiedź) Ale po jakimś czasie znalazłem rozwiązanie, jak rozwiązać ten problem bez przewijania zawartości każdego czasu do góry. Nadzieję, że będzie pracować dla Ciebie)

https://stackoverflow.com/a/22699785/246598