kroki tworzenia UIScrollView za pomocą narzędzia Interface Builder

Jestem w trakcie próby użycia UIScrollView i wydaje się, że jest jakaś fundamentalna rzecz, której po prostu nie rozumiem.

Powiedzmy, że chcę używać UIScrollView w mojej aplikacji na iphone ' a. Mam Widok wypełniony przyciskami, który jest 320x700. Oczywiście jest to zbyt duże dla iPhone ' a, który ma 320x480. Więc wiem, że muszę użyć UIScrollView. Jednak czy w takiej kolejności powinienem tworzyć obiekty

  1. Utwórz UIScrollView o wymiarach 320x700 in "View"
  2. Umieść wszystkie moje przyciski itp. na tym widoku przewijania
  3. w viewDidLoad Ustaw rozmiar zawartości na 320x700
  4. ustawia delegata UIScrollView na właściciela pliku, a Widok właściciela pliku na UIScrollView
  5. Przywróć rozmiar widoku z powrotem do 320x480.

Czy to prawda?

To działa, ale dla mnie to nie ma sensu. Rozumiem, że Widok ma być kanwą, gdzie dodaję wszystkie elementy interfejsu. Chcę "płótno" z aplikacja iPhone ma być 320x700 i chcę móc umieścić moje przyciski itp. na tym płótnie 320x700. Ale jeśli nie zmienię rozmiaru UIScrollView z powrotem do 320x480, nie będzie przewijać, ponieważ muszę ustawić rozmiar zawartości UIScrollView większy niż jego rozmiar.

Ale jeśli ustawiłem rozmiar UIScrollView na 320x480, to nie widzę ekranu i przycisków między 480 a 700 W Interface Builder! Wygląda na to, że powinienem zrobić wszystkie moje edycje i dodać wszystkie moje elementy UI do UIScrollView, a następnie ustaw go z powrotem na 320x480!

Czy jest jakiś inny sposób, aby to zrobić, który ma większy sens? Czego mi brakuje w moim zrozumieniu, jak to powinno działać?

Author: steve8918, 2012-02-02

2 answers

UPDATE

Zamieściłem inne rozwiązanie tutaj które moim zdaniem jest prostsze i lepsze.

ORIGINAL

Oto inny sposób, aby to zrobić, który może Ci się bardziej spodobać:

  1. Ustaw niestandardową klasę zastępczą właściciela pliku na podklasę kontrolera widoku.
  2. Utwórz UIScrollView jako obiekt najwyższego poziomu w swojej stalówce. Ustaw jego rozmiar na rozmiar ekranu (320x460) lub po prostu Włącz pasek stanu w obszarze "Symulowane metryki".
  3. Połącz wyjście scroll view delegate do właściciela pliku.
  4. Ustaw wyjście właściciela pliku view do widoku przewijania.
  5. Utwórz UIView jako kolejny obiekt najwyższego poziomu w swojej stalówce. To będzie twój widok treści.
  6. Ustaw rozmiar widoku zawartości na 320x700.
  7. Utwórz silne (lub zachowaj, jeśli nie używasz ARC) Gniazdo o nazwie contentView w kontrolerze widoku (właściciel pliku) i podłącz je do widoku zawartości.
  8. umieść swoje przyciski w treści widok.
  9. W kontrolerze widoku viewDidLoad, zrób to:

    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view addSubview:self.contentView];
        ((UIScrollView *)self.view).contentSize = self.contentView.frame.size;
    }
    
  10. W kontrolerze widoku viewDidUnload, zrób to:

    - (void)viewDidUnload {
        self.contentView = nil;
        [super viewDidUnload];
    }
    

okno projektu scrollbuttons
Pełny rozmiar

 42
Author: rob mayoff,
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
2017-05-23 12:19:48

Masz rację, widok jest kanwą, w której dodajesz wszystkie elementy interfejsu. Interface builder jest trochę dziwny na początku, ale przyzwyczaisz się do tego, tak to działa.

Utkniesz z faktem, że musisz zmienić rozmiar widoku przewijania. Powinieneś myśleć o tym w ten sposób: Widok przewijania ma rozmiar ramki i rozmiar zawartości. Sposób, w jaki jest zbudowany, polega na tym, że jeśli rozmiar zawartości jest większy niż rozmiar ramki, To będzie on przewijany. Musisz zrobić ramę tak dużą, jak potrzebujesz w kreatorze interfejsów, dzięki czemu można ustawić elementy, które wchodzą do środka. Po uruchomieniu aplikacji należy zmienić rozmiar ramki przewijania, aby zmieścić się w rozdzielczości ekranu iPhone ' a. Nie ma sensu, aby twoje elementy sterujące miały ramkę większą niż ekran.

--------------------------------------------
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |<------------------ iPhone Screen frame
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |         |<------- ScrollView Content size
|         |                      |         |
|         |                      |         |
|         |                      |<----------------- ScrollView Frame Size
|         |                      |         |
|         |                      |         |      
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         ------------------------         |
|                                          |
|                                          |
|                                          |
--------------------------------------------

Mam nadzieję, że ta reprezentacja wyjaśni, jak rzeczy powinny się work.To mówiąc inaczej, ramka przewijania to koryto otworu, które można zobaczyć, jeśli całość jest tak duża, jak zawartość wtedy nie musisz przewijać, bo możesz zobaczyć wszystko.

Sugerowałbym również próbę napisania komponentów w kodzie bez użycia IB, aby uzyskać lepsze zrozumienie.

 5
Author: Alex Stanciu,
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
2012-02-02 20:34:23