2014-05-21 9 views
31

Ho questa disposizione in Interface Builder, Tutte le proprietà sono impostate su zero.UICollectionVIew: Come posso rimuovere lo spazio in cima alla riga della prima cella

enter image description here

Tuttavia, quando l'eseguo su entrambi i dispositivi e il simulatore appare come questa

enter image description here

casi in cui è lo spazio sopra le cellule vengono?

così cerco di impostare queste proprietà per UICollectionViewFlowLayout in codice come questo

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    layout.headerReferenceSize = CGSizeZero; 
    layout.footerReferenceSize = CGSizeZero; 
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); 
    layout.minimumInteritemSpacing = 0; 
    layout.minimumLineSpacing = 0; 
    layout.itemSize = CGSizeMake(103, 119); 

    self.calendarView.collectionViewLayout = layout; 

ma non ho fortuna.

Come posso liberarmi di quello spazio? Grazie.

risposta

93

UICollectionView è discendente della classe UIScrollView che ha contentInset proprietà, impostando -20 superiore inserto risolve il problema

[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)]; 

Tuttavia, il problema viene da proprietà di UIViewController automaticallyAdjustsScrollViewInsets. da documentazione:

valore predefinito è Sì, che permette al controller della vista per regolare la sua vista di scorrimento inserti in risposta alle aree dello schermo consumati dalla barra di stato, barra di navigazione e barra degli strumenti o barra delle schede. Impostare su NO se si desidera gestire da soli le correzioni della visualizzazione della vista a scorrimento.

Ecco perché vengono inseriti gli inserti di contenuto adeguati per la barra di stato. È meglio disabilitare la regolazione automatica rispetto al valore impostato manualmente che non corrisponde all'immagine dei risultati.

[self setAutomaticallyAdjustsScrollViewInsets:NO]; 
+0

non sta funzionando. – SaintTail

+0

Sebbene mi porti alla risposta corretta. Devo impostare edge come (-20,0,0,0). Non so perché è necessario. Ma grazie. Puoi modificare la tua risposta in modo che io possa votare. – SaintTail

+0

ok, provo ad aiutare :) buona fortuna! – Seryozha

7

Si può anche andare con

[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 
[self setAutomaticallyAdjustsScrollViewInsets:NO]; 

C'è da raccolta predefinita vista intestazione spazio scorrimento aggiunto sulla vista di raccolta e non c'è bisogno di aggiungere -20 da cima perché può riflettere sul dispositivo problema

10

Ecco la risposta in rapido con pochi aggiustamenti:

ho una visione collezione che prende s una piccola parte della vista. Ho usato:

self.automaticallyAdjustsScrollViewInsets = false 

per rimuovere la spaziatura superiore che è stato in disordine il mio layout. Questo pezzo di codice non ha funzionato per me:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 

e nemmeno questo:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0) 

ma che potrebbe essere perché io non sto usando un UICollectionViewController, sto solo usando un UICollectionView.

Ecco una porzione più grande del codice per dare più contesto: enter image description here

+0

Hai trovato la soluzione? Posso vedere solo il miglioramento in questione. Sto avendo lo stesso caso usando 'UIViewController' non' UICollectionViewControllel' – umair151

+0

Quindi ho usato 'self.automaticallyAdjustsScrollViewInsets = false' e ​​questo si è occupato del mio problema di spaziatura. Puoi spiegare un po 'di più e forse posso aiutare di più? –

61

Un altro modo è quello di selezionare il ViewController e deselezionare la casella di controllo Regola di scorrimento Visualizza Inserti nel vostro costruttore di interfaccia:

enter image description here

È essenzialmente uguale alla seguente riga di codice. Ma devi vedere subito i tuoi cambiamenti nel builder dell'interfaccia.

automaticallyAdjustsScrollViewInsets = false 
+2

Fa il lavoro. Grazie –

1

Questa risposta è strano, ma funziona se si sta lavorando in Interface Builder e dispone di una collezione vista incorporata in una View Controller che si trova sotto il controllo di un Tab Bar controller che è il controller di vista radice di un Controller di navigazione.

  • Aggiungere una barra degli strumenti al controller della vista che ha la collezione guarda
  • Spostare la barra degli strumenti nella gerarchia tale che è al di sopra della collezione guarda

Se la barra degli strumenti è al di sopra della Collezione Vista, non ci sarà spazio dalla parte superiore del prototipo Collection View Cell alla Vista Collection. Se non c'è alcuna barra degli strumenti o la barra degli strumenti si trova sotto la Vista raccolta, allora ci sarà spazio tra la parte superiore della Vista raccolta e la Cella vista raccolta. Questo è vero sia nell'anteprima di Storyboard che durante l'esecuzione dell'app. Lo stesso tipo di cosa si verifica per le viste tabella.

Questo è stato recentemente testato con Xcode versione 8.3.3 Collection View Cells and Toolbar Dependency

0

Swift 3:

self.automaticallyAdjustsScrollViewInsets = false

Problemi correlati