2012-01-17 13 views
7

Więc mam UIImageView jako podrzędny o UIScrollView, mam ustawić contentSize być mniejsza niż szerokość UIImageView i wysokości, jednak nie pozwala mi przejść .. dlaczego to? Oto kod:UIScrollView nie przewijanie chociaż contentSize jest mniejszy niż UIImageView

UIImage * image = [UIImage imageWithData:data]; 
       UIImageView * imgView = [[UIImageView alloc] initWithImage:image]; 
       [imgView setUserInteractionEnabled:YES]; 
       //[imgView setContentMode:UIViewContentModeScaleAspectFill]; 
       [imgView setBackgroundColor:[UIColor clearColor]]; 
       [imgView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 
       [imgView setFrame:CGRectMake(0, 0, imgView.frame.size.width, imgView.frame.size.height)]; 

       CGRect imgFrame; 
       imgFrame.size.width = originalImageSize.width; 
       imgFrame.size.height = originalImageSize.height; 
       imgFrame.origin.x = imageOriginPoint.x; 
       imgFrame.origin.y = imageOriginPoint.y; 

       UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:imgFrame]; 
       [imgScrollView setScrollEnabled:YES]; 
       [imgScrollView setClipsToBounds:YES]; 
       [imgScrollView addSubview:imgView]; 
       [imgScrollView setBackgroundColor:[UIColor clearColor]]; 


    [imgScrollView setFrame:imgFrame]; 
       [imgScrollView setContentSize:CGSizeMake(200, 200)]; 

SCROLL VIEW CONTENT SIZE WIDTH IS 200.000000 AND HEIGHT CONTENT SIZE IS 200.000000 
UIIMAGE VIEW WIDTH IS 2240.225830 AND HEIGHT IS 2240.225830 
SCROLL VIEW FRAME WIDTH IS 768.000000 AND SCROLL VIEW FRAME HEIGHT IS 768.000061 

Masz pomysł?

+0

spróbować ... imgScrollView.contentSize = imgView.frame .rozmiar; –

+0

nie działa też – adit

Odpowiedz

10

Dzieje się tak, ponieważ rozmiar granic przewijania jest większy niż rozmiar zawartości. Rozmiar zawartości musi być rzeczywistym rozmiarem widoku obrazu, a widoczny rozmiar jest ustawiany ramką/ramkami. Chyba chcesz przewinąć obraz w rozmiarze {200, 200}? Spróbuj tego:

 UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; // this is your visible rect 
     [imgScrollView setScrollEnabled:YES]; 
     [imgScrollView setClipsToBounds:YES]; 
     [imgScrollView addSubview:imgView]; 
     [imgScrollView setBackgroundColor:[UIColor yellowColor]]; 

     [imgScrollView setContentSize:imgFrame.size]; // this is your image view size 
+0

, więc rozmiar ramki musi być mniejszy niż contentSize? jeśli rozmiar klatki jest taki sam jak rozmiar zawartości, to nie będzie przewijania? – adit

+14

Domyślnie TAK. Ale jeśli ustawisz alwaysBounceVertical i alwaysBounceHorizontal na YES (domyślne NIE), możesz przeciągnąć widok treści nawet contentSize jest mniejszy niż rozmiar ramki –

+0

To powodowało, że przewijanie nie przewijało się, gdy contentSize była mniejsza niż rozmiar obwiedni . W moim przypadku chcę zmniejszyć rozmiar treści przewijania po pojawieniu się klawiatury, byłem zaskoczony, że zmniejszenie rozmiaru zawartości nie powoduje przewijania widoku przewijania. Zgadnij, zamiast tego muszę zmienić ramkę widoku przewijania. –

0

przewijania rozmiar zawartość powinna być większa niż szerokość i wysokość ramy Scrollview
to zrobić -

scrollView.contentSize = CGSizeMake(originalImageSize.width,originalImageSize.height); 

Myślę, że to pomoże.

+0

co jeśli to jest to samo? – adit

+0

To nie pozwoli na przewijanie, jeśli chcesz przewijać przewijanie, rozmiar zawartości powinien być większy niż rozmiar ramki. – mithilesh

5

wiem, że to jest stary, ale chcę podkreślić, że podczas tworzenia UIScrollView w kodzie najważniejszą rzeczą jest, aby ustawić:

scrollView.scrollEnabled = YES;

Jeśli nie ustawione, że Twój contentSize jest bez znaczenia.

+1

To jest o wiele lepiej dostosowane do bycia komentarzem niż odpowiedzią. W każdym razie jest to mylące: jak [określone w dokumentacji] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/ instp/UIScrollView/scrollEnabled), domyślną wartością dla 'scrollEnabled' jest' YES'. ** nie musisz ustawiać 'scrollEnabled' na' YES' w kodzie, chyba że wcześniej ustawiłeś na 'NO'. – sjwarner

+1

Nie zgadzam się.Działa również jako odpowiedź. (I to właśnie rozwiązało mój problem, dzięki Chris.) Wiele osób przewija w dół, patrząc na odpowiedzi, i nie czyta wszystkich (ani żadnych) komentarzy, chyba że odpowiedź do nich prowadzi. Czasami pracujesz z kodem napisanym przez kogoś innego i możesz nie znać tego wszystkiego. – Alyoshak

+0

Musiałem ustawić koparkę na TAK, aby przewinąć. – Chris

0

Jeśli próbujesz ustawić to za pomocą IB, upewnij się, że właściwość Wysokość UIScrollView jest ustawiona na niższy numer niż właściwość Wysokość treści contentView. Na przykład, jeśli ustawiłeś wysokość swojego contentView na 810 pkt, upewnij się, że ustawiłeś wysokość UIScrollView na około 610 pkt.

2

Jankowy sposób to zrobić, aby zawsze ustawić contentSize na większy niż rozmiar widoku. Ale jest nieruchomość w Swift, która pozwala Scrollview zawsze „przewijania” niezależnie od wielkości Treść:

scrollView.alwaysBounceVertical = true 

Jest jeden do poziomego przewijania oraz

Powiązane problemy