UIScrollView nie przewija się w iOS7 z włączonym autolayout

Mam UIScrollView z 6 polami tekstowymi i Przyciskiem w środku. W widoku przewijania nie ma wystarczającej ilości zawartości, aby ją przewijać.

Ale gdy pojawi się klawiatura, chciałbym, aby scrollview przewijał się, aby użytkownik nie musiał odrzucać klawiatury, aby wybrać inne pole tekstowe, które jest ukryte przez klawiaturę.

Używam iOS7 i mam włączony autolayout.

Jakieś sugestie?

Używam storyboardów i jedyny kod jaki mam to podążam.

Reg.plik h

interface registerViewController : UIViewController <UITextFieldDelegate, UIScrollViewDelegate>
Author: jdog, 2013-12-02

3 answers

Aby widok przewijania był przewijalny, Rozmiar zawartości musi być większy niż ramka widoku przewijania, aby widok przewijania miał do czego przewijać. Użyj setContentSize, aby dostosować rozmiar zawartości:

[scrollview setContentSize:CGSizeMake(width, height)];

W takim przypadku należy dostosować rozmiar do wyświetlenia.rama.szerokość, widok.rama.wysokość + keyboard_height, następnie dostosuj przesunięcie zawartości po pojawieniu się klawiatury:

[scrollview setContentOffset:CGPointMake(0, 0 - keyboard_height)];

Jeśli z jakiegoś przykrego powodu, związanego z autolayout, nadal nie powoduje to przewijania widoku, zaimplementuj ta funkcja setContentSize w viewDidLayoutSubviews w celu nadpisania autolayout:

- (void)viewDidLayoutSubviews {
     [scrollview setContentSize:CGSizeMake(width, height)];
}

EDIT: aby zresetować scrollview po zwolnieniu klawiatury, zresetuj Rozmiar zawartości scrollview do ramki scrollview i przesunięcie do zera:

[scrollview setContentSize:CGSizeMake(scrollview.frame.size.width, scrollview.frame.size.height)];
[scrollview setContentOffset:CGPointZero];

P. S. aby animować przesunięcie zawartości, użyj:

[scrollview setContentOffset:offsetSize animated:YES];
 75
Author: Lyndsey Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-07 14:47:04

Istnieje właściwość contentInset UIScrollViews, możesz ustawić contentInset, aby robił dodatkowe miejsce na dole, aby umożliwić przewijanie bez zmiany rozmiaru contentSize.

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, 100, 0.0);
scrollView.contentInset = contentInsets;

Powyższy kod dodaje 100 punktów na dole.

Przy okazji, jest oficjalny dokument o tej sprawie. To wyjaśnia wszystko, co powinieneś zrobić. Możesz go znaleźć tutaj. Możesz znaleźć to, czego szukasz w sekcji " Przenoszenie treści, które znajduje się pod Klawiatura"

 16
Author: mrt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 16:09:39

Try

  1. Tworzenie widoku przewijania
  2. Dodaj widok do widoku przewijania (w moim przypadku dodałem Widok jako mainView).
  3. Ustawia automatyzację ScrollView.
  4. Set mainview autoresizing .

  5. Aby ustawić rozmiar zawartości przewijania równy utworzonemu widokowi, dodaj poniższą linię

Dodaj poniższy wiersz

-(void)viewDidLayoutSubviews

{

[super viewDidLayoutSubviews];

self.scrollView.contentSize = self.mainView.frame.size;

}
 0
Author: Sreenath S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 05:25:39