2013-08-02 11 views
12

Ho impostato uno UIScrollView con cui voglio visualizzare 12 immagini (solo 8 adattate sullo schermo) disposte orizzontalmente. Nell'immagine seguente potete vedere il problema che sto avendo (che rende la mia vista di scorrimento non scorrere), i miei limiti e la UIScrollView che ho aggiunto su storyboard:iOS: Autolayout che causa la mancata scorrimento di UIScrollView

Screenshot of storyboard showing constraints

ho chiamato il seguente metodo su -(void)viewDidLoad, dove ho "Set up" il mio ScrollView (ITEMLIST è la mia proprietà vista di scorrimento e itemNames una matrice con i images'names):

- (void)setupHorizontalScrollView 
{ 
    self.itemList.delegate = self; 
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [self.itemList setBackgroundColor:[UIColor blackColor]]; 
    [self.itemList setCanCancelContentTouches:NO]; 

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    self.itemList.clipsToBounds = NO; 
    self.itemList.scrollEnabled = YES; 
    self.itemList.pagingEnabled = NO; 

    NSInteger tot=0; 
    CGFloat cx = 0; 
    for (; ; tot++) { 
     if (tot==12) { 
      break; 
     } 

     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]]; 

     CGRect rect = imageView.frame; 
     rect.size.height = 40; 
     rect.size.width = 40; 
     rect.origin.x = cx; 
     rect.origin.y = 0; 

     imageView.frame = rect; 
     [self.itemList addSubview:imageView]; 
     cx += imageView.frame.size.width; 
    } 

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)]; 
} 

ho aggiunto le [setTranslatesAutoresizingMaskIntoConstraints self.itemList: NO]; perché ho visto questo suggerimento su altri post, ma non funziona con o senza di esso. L'unico modo in cui funziona è se deseleziono l'uso di AutoLayout nello storyboard, ma ciò sposta lo UIImageView che utilizzo come barra di navigazione nella parte inferiore dello schermo. Non so più cosa fare, ogni aiuto è apprezzato :)

risposta

9

due soluzioni:

  1. creare diversi vincoli che possono essere soddisfatte contemporaneamente (si dovrà modificare). Penso che il problema sia il tuo spazio di fondo e che i limiti dello spazio superiore si escludano a vicenda. per favore rimuovine uno e riprova. Se questo è difficile per te, prova ad aggiungere un altro UIView per contenere il UIScrollView per aiutare a gestire i vostri vincoli, potrebbe sembrare strano in un primo momento, ma a volte aggiungendo un altro al fine di contenere la visualizzazione rende effettivamente più semplice ad ogni livello.

  2. Disattiva Autolayout e modifica le maschere di autorizzazione del tuo UIImageView come desideri.

+0

Ho provato a rimuovere uno di loro, ma non so come farlo. Potresti dirmi? – dietbacon

+1

Fare clic sull'icona dell'ingranaggio sul vincolo e rimuoverlo se lo consente oppure modificarlo in modo meno specifico (ad es. Variabile o auto, quindi non interessa). –

+1

dopo questo punto, l'autolayout sarà sempre più importante per lo sviluppo dell'interfaccia utente iOS/Mac e la programmazione dell'interfaccia utente. l'embed-in-view mi ha davvero aiutato a far funzionare la visualizzazione a scorrimento mentre utilizzavo ancora tutti i vantaggi del rollload automatico. –

3

Inserire: [scrollView setContentSize:CGSizeMake(x,y)]; nel seguente metodo:

-(void)viewWillAppear:(BOOL)animated 
31

tenta di impostare dimensioni contenuti int del ScrollView "viewDidLayoutSubviews" metodo di mantenere i autolayouts set.

-(void)viewDidLayoutSubviews 
{ 
    [self.itemList setContentSize:CGSizeMake(required_width, required_height)]; 
} 
+0

È stato fantastico, spiegami perché è necessario aggiungere questo metodo. –

+0

impressionante bro ... Nice one grazie ... Ha funzionato per me anche ... –

+0

grazie ha funzionato anche per me, ma che cosa è la differenza +1 – ashokdy