UICollectionViewCell Polsterung
Ich versuche zum setzen von null-Polsterung auf Sammlung anzeigen-Zellen habe ich "Min-Abstand" auf die view-controller:
Doch es hat immer noch Lücken zwischen den Zellen:
Außerdem möchte ich es so, dass die Zellen wrap schön abhängig von der Breite des Rahmens, zum Beispiel jeder Zelle ist 50 Pixel breit, also, wenn es sechs Zellen, und ich stellen Sie die frame-Breite 150px, es zeigt zwei Linien mit drei Zellen.
Doch wenn ich die Bildbreite auf 150 by doing:
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame = self.collectionView.frame;
frame.size.width = 150;
self.collectionView.frame = frame;
}
Sieht es aus wie im obigen screen-shot (zu breit).
Wenn ich es etwas lächerlich klein wie 10, es dann wraps zum Teil:
Den UICollectionViewCell ist 50 x 50:
Ich habe auch versucht, die Einstellung der Größe der Zelle programmgesteuert, und auch entfernt UIEdgeInset:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(0, 0, 0, 0);
}
Habe ich deaktiviert auto-layout nur incase, dass hatte keine Störungen. Irgendwelche Ratschläge, wie ich kann entfernen Sie die Polsterung und auch haben, Sie zu wickeln, abhängig von der frame-Breite /Höhe?
- Kann ich nicht reproduzieren dieses Problem. Ich fing Sie ein leeres Projekt mit einem einzigen Blick, eine auflistungsansicht als eine Untersicht, setzen Sie die Einstellungen die gleichen wie diejenigen, die oben gezeigt wird, und aus dem Bild in das storyboard werden 175x175. Diese Leerzeichen aus den Zellen (die das flow-layout hat natürlich). Ich ändern Sie die frame-Größe in viewDidLoad, die mit Ihrem code, und es ändert sich um 150 breit ist und die Zellen füllen die Lücken. Es ist etwas anderes passiert, das nicht in deiner Frage.
- ah! Sie sind mit einem UICollectionViewController. Mit diesem, Sie können nicht ändern die Größe der Sammlung anzuzeigen. Es füllt immer den Bildschirm (es sei denn, Sie haben, eingebettet in einen container view controller). Mal sehen, ob die Abstände verändert werden können...
- Vielen Dank für Ihre Zeit, die versuchen zu reproduzieren. Ich habe gerade angefangen neu, obwohl das problem bleibt immer noch. Hochgeladen habe ich ein Beispiel hier, die von nutzen sein können: dl.dropbox.com/u/71160589/example.zip
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit einem UICollectionViewController, die wie eine UITableViewController, hat die Sammlung-Ansicht (oder Tabellenansicht) als Basis
view
- Eigenschaft des view-Controllers. Dies bedeutet, es kann nicht geändert werden innerhalb des view-Controllers; seine Größe wird durch seine gesteuert superview - entweder das Fenster, in diesem Fall, was hat es als root-view-controller oder einer übergeordneten view-controller, wenn Sie waren Einbettung.Wenn Sie möchten, reduzieren Sie die Ansicht Sammlung Bereich, so dass die Zellen berühren einander, können Sie ändern Sie den Abschnitt Abstände der Ansicht Sammlung in das storyboard. In Ihrem Fall, eines Abzugs von 15 linken und rechten Seite bringt die Zellen zusammen - das ist 9 * 50 (450) plus 30 = 480, das ist die Breite eines 3,5-Zoll-iPhone in der Landschaft.
Natürlich wird dies anders sein, das iPhone 5 oder iPad. Sie können entweder die Berechnung der Abstände zur Laufzeit verwenden Sie eine Sammlung anzeigen statt in einem standard-UIViewController-Unterklasse, oder halten Sie die UICollectionViewController als embedded view-controller. Die zwei letzteren ermöglichen, werden Sie nur eine Größe angeben, das ist wohl schöner, als die Berechnung der Abstände.
Ich bin nicht sicher, daß diese Zellen in der Abbildung sind 50x50 (EDIT: ich vermute, Sie sind...).
Überprüfen Sie den korrekten Anschluss der UICollectionViewDelegate und UICollectionViewDataSource.
Diese es die Methode, die Sie implementieren müssen
Wenn es nicht funktioniert, versuchen Sie diesen code in viewDidLoad
Implementieren Sie diese Methode in Ihrem ViewController
den minimumInteritemSpacing ist nur, dass Sie einen minimalen Wert, so kann es größer sein, wenn die UICollectionViewLayout Klasse entscheidet, es muss
Berichtigung dieses können Sie erstellen Ihr eigenes layout Unterklasse, und implementieren Sie die
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
Methode, so etwas wie die Antwort von diese Frage (siehe die zweite Frage, nicht die, die als korrekt markiert)