2012-02-18 17 views
14

Jestem nowicjuszem, więc moje pytanie może być naprawdę oczywiste, ale do tej pory nie znalazłem żadnego rozwiązania.Jak programowo ustawić rozmiar ramki UIScrollView?

Zrobiłem w IB UIScrollView i połączyłem go z właścicielem pliku. Chciałbym ustawić teraz rozmiar ramki mojego UIScrollView (o nazwie ScrollView).

const CGFloat BoardWidth = 320; 
const CGFloat BoardHeight = 400; 

//I tried this way but 'Expression is assignable' - said Xcode 
ScrollView.frame.size.width = BoardWidth; 
ScrollView.frame.size.height = BoardWidth; 

Jak mogę najłatwiej ustawić własne rozmiary ramki ScrollView?

+5

W celu późniejszego odniesienia: zgodnie z konwencją w Objective-C, nazwy klas rozpoczynają się od dużej litery, podczas gdy klasa * instances * i wartości skalarne zaczynają się od małej litery. Więc 'scrollView',' boardWidth' i 'boardHeight' będzie zgodny z konwencją. – yuji

Odpowiedz

15
CGRect scrollFrame = CGRrectMake(x, y, w, h); 
ScrollView.frame = scrollFrame; 

Lub jeśli potrzebujesz tylko zmienić szerokość i wysokość;

CGRect scrollFrame; 
scrollFrame.origin = ScrollView.frame.origin; 
scrollFrame.size = CGSizeMake(w, h); 
ScrollView.frame = scrollFrame; 

Edit utrzymanie centrum niezmienione:

CGRect scrollFrame; 
CGFloat newX = scrollView.frame.origin.x + (scrollView.frame.size.width - w)/2; 
CGFloat newY = scrollView.frame.origin.y + (scrollView.frame.size.height - y)/2; 
scrollFrame.origin = CGPointMake(newX, newY); 
scrollFrame.size = CGSizeMake(w, h); 
scrollView.frame = scrollFrame; 
+0

Hm ... Wydaje się być w porządku, ale chciałbym zachować pozycje X i Y, jak ustawiłem w Interface Builder. –

+0

Tak, spróbuj drugiej metody, którą zasugerowałem. Zmienia jedynie szerokość i wysokość i utrzymuje niezmienione wartości xiy. W rzeczywistości CGRect składa się z początku, w którym zapisywane są xiy, oraz rozmiaru, w którym zapisywane są szerokość i wysokość. – sch

+0

Okay, okay. Dobrze. Nie zrozumiałem tego na pierwszy rzut oka. Ale teraz zmienia rozmiar UIScrollView zachowując lewy górny punkt. Więc jeśli chcę, żeby zawsze była wyrównana do środka, muszę to teraz wyrównać, prawda? –

0

pomocą właściwości contentSize

ScrollView.contentSize = CGSizeMake(320, 520); 

musi być większy niż ramy tak faktycznie przewija.

4

Można to zrobić jak poniżej,

scrollView.frame = CGRectMake(xOrigin,yOrigin,width,height); 

Jeśli szukasz rozmiaru content Scrollview to jak poniżej,

scrollView.contentSize = CGSizeMake(width,height); 
+0

ustawianie zawartościRozmiar w ten sposób przewijanie nie jest przewijane. –

1
CGRect Frame = ScrollView.frame 

Frame.frame.size.width = BoardWidth; 
Frame.frame.size.width = BoardWidth; 

ScrollView.frame = Frame; 

Ponieważ ramka jest strukturą .. nie możesz bezpośrednio ustawić ramki obiektu. Będziesz musiał wykonać Cgrect, a następnie manipulować nim.

5

musisz to zrobić, na przykład.

ScrollView.frame = CGRectMake(0, 0, BoardWidth, BoardHeight); 

Po wykonaniu tej czynności należy również ustawić właściwość contentSize. To obszar, który "rozciąga się" za ramą twojego UIScrollView.

Jeśli chcesz przewijać tylko poziomo:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, BoardHeight); 

Jeśli chcesz przewijać tylko w pionie:

ScrollView.contentSize = CGSizeMake(BoardWidth, h * BoardHeight); 

Jeśli chcesz przewijać w poziomie i pionie:

ScrollView.contentSize = CGSizeMake(w * BoardWidth, h * BoardHeight); 

gdzie w i h są wartościami ogólnymi do incremen t swoją szerokość i/lub wzrost.

Jeśli chcesz mieć poziome (na przykład) dyskretne przewijanie (np. Masz kilka stron o tym samym wymiarze ekranu).

ScrollView.pagingEnabled = YES; 
ScrollView.contentSize = CGSizeMake(p * BoardWidth, BoardHeight); 

gdzie p to liczba stron, które chcesz wyświetlić.

Mam nadzieję, że to pomaga.

+0

Hehe, wielkie dzięki. Już to napisałem, naprawdę w ten sam sposób. : P –

+0

awansuj jeśli Ci się podobało ... Pozdrawiam :) –

Powiązane problemy