2012-01-17 11 views
7

Così ho un UIImageView come una visualizzazione secondaria di UIScrollView, ho impostato il contentSize ad essere più piccoli rispetto alla larghezza e l'altezza UIImageView, tuttavia non mi permette di scorrere .. perchè è questo? Ecco alcuni codici:UIScrollView non scorre anche se contentSize è più piccolo di 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 

Qualche idea?

+0

provare questo ... imgScrollView.contentSize = imgView.frame .dimensione; –

+0

non funziona troppo – adit

risposta

10

Questo perché la dimensione dei limiti della visualizzazione di scorrimento è maggiore della dimensione del contenuto. La dimensione del contenuto deve essere la dimensione effettiva della vista dell'immagine e la dimensione visibile è impostata per fotogramma/limiti. Immagino tu voglia scorrere un'immagine in un rect {200, 200}? Prova questo: vista

 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

quindi la dimensione del frame deve essere inferiore a contentSize? se la dimensione della cornice è la stessa di contentSize, allora non scorrerà? – adit

+14

Per impostazione predefinita, SÌ. Ma se si imposta alwaysBounceVertical e alwaysBounceHorizontal su YES (entrambi NO predefiniti), è possibile trascinare la visualizzazione del contenuto anche se contentSize è inferiore alla dimensione del fotogramma –

+0

Mi stava facendo impazzire perché lo scrollview non scorreva quando contentSize era inferiore alla dimensione dei limiti . Nel mio caso, voglio ridurre la dimensione del contenuto di scrollview quando viene visualizzata la tastiera, sono rimasto stupito nel vedere che la riduzione della dimensione del contenuto non rende la vista di scorrimento scorrevole. Indovina, devo cambiare la cornice della vista di scorrimento. –

0

scorrimento dimensioni del contenuto dovrebbe essere più che ScrollView larghezza del telaio e l'altezza
fare questo -

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

penso che sarà di aiuto.

+0

cosa succede se è lo stesso? – adit

+0

Non consente lo scorrimento, se si desidera scorrere lo scroller, la dimensione del contenuto deve essere superiore alla dimensione del fotogramma – mithilesh

5

So che questo è vecchio, ma voglio sottolineare che quando si crea un UIScrollView nel codice la cosa più importante per impostare è:

scrollView.scrollEnabled = YES;

Se non si imposta questo, il vostro contentSize è irrilevante.

+1

Questo è molto più adatto per essere un commento, piuttosto che una risposta. In ogni caso è fuorviante: come [dichiarato nei documenti] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/ instp/UIScrollView/scrollEnabled), il valore predefinito per 'scrollEnabled' è' YES'. ** non ** è necessario impostare 'scrollEnabled' su' YES' nel codice, a meno che non sia stato precedentemente impostato su 'NO'. – sjwarner

+1

Non sono d'accordo.Funziona anche come risposta. (E ha appena risolto il mio problema. Grazie Chris.) Un sacco di persone scorrere verso il basso guardando le risposte, e non leggere tutti (o nessuno) dei commenti a meno che la risposta li porta a. A volte stai lavorando con il codice scritto da un altro e potresti non avere familiarità con tutto ciò. – Alyoshak

+0

Ho dovuto impostare il mio su SÌ per farlo scorrere. – Chris

0

Se si sta tentando di impostarlo tramite IB, assicurarsi che la proprietà Altezza di UIScrollView sia impostata su un numero inferiore rispetto alla proprietà Height di ContentView. Ad esempio, se hai impostato l'altezza di contentView su 810 punti, assicurati di impostare l'altezza di UIScrollView su qualcosa come 610 punti circa.

2

il modo janky di fare questo è impostare sempre il contenutoSize per essere più grande della dimensione della vista. Ma c'è una proprietà a Swift che consente a uno ScrollView per sempre "scorrere" a prescindere dalle dimensioni contenuti:

scrollView.alwaysBounceVertical = true 

Ce n'è uno per lo scorrimento orizzontale e

Problemi correlati