2016-04-17 8 views
0

Ich habe eine UICollectionView durch das Storyboard erstellt und vorübergehend in der Ansicht positioniert; Ich möchte jedoch die Positionen beim Start programmatisch überschreiben, anstatt die Storyboard-Konfiguration zu verwenden.UICollectionView Breite programmatisch im Konflikt mit Storyboard-Initialisierung

enter image description here

Ich dachte viewDidLoad() die richtige Lage war diese Änderung vornehmen zu platzieren?

Swift 2 Code:

override func viewDidLoad() { 
    super.viewDidLoad() 

    collectionView.dataSource = self 
    collectionView.delegate = self 
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell") 
    collectionView.backgroundColor = UIColor(white:1, alpha:0.0) 

    // Doesn't stretch the width to the device's width on launch. :-(
    collectionView.frame.size = CGSize(width: UIScreen.mainScreen().bounds.width, height: 200)   
} 
+0

helfen verwenden Sie automatische Layout? Hast du Einschränkungen von Storyboard-Mitteln vom Interface Builder gesetzt? – Lion

+0

Ja, ich habe Einschränkungen vom Interface Builder festgelegt. Ich bin mir nicht sicher, wie ich sie zurücksetzen kann, indem ich zum Objekt der UICollectionView im Storyboard gehe und die Einschränkungen lösche, aber das hilft nicht. Die Breite wird nicht programmgesteuert geändert. – theflarenet

Antwort

2

Wenn Sie Einschränkungen setzen und wollen dann height oder width ändern, dann sollten Sie Ausgang dieser Höhe oder Breite nehmen und increament es konstanter Wert ist. Strg + ziehen Sie von der Breiteneinschränkung zur Klasse und machen Sie outlate und inkrementieren Sie dann die contant Eigenschaft dieses outlate in viewdidload.

zum Beispiel

@IBOutlet weak var heightConstraint: NSLayoutConstraint! 

self.heightConstraint.constant = 200 

Und zweitens, was, wenn Sie Ihre Kollektionhöhe gleich mit Gerät halten wollen, dann gibt es keine Notwendigkeit, programmatisch zu setzen. Autolayout verwaltet es, wenn Sie die richtige Einschränkung festlegen. Der Hauptpunkt ist die Verwendung von Autolayout in allen oder nicht. mischen Sie nicht beide automatisches Layout und stellen Sie dann den Rahmen programmatisch ein.

Hoffnung diese :) enter image description here

+0

Interessante Problemumgehung. Ich versuche es gerade jetzt, aber ich bin mir nicht sicher, was ich STRG + genau vom XIB-Storyboard ziehe. Wählt ich zuerst das Objekt der UICollectionView aus? – theflarenet

+0

Nein, Sie müssen die Constraint-Linie auswählen, die im Storyboard rot sein muss, und dann ctrl + ziehen Sie sie auf den Code –

+0

, wählen Sie die Constraint- und steuern + ziehen Sie von ihr zur Klasse. Halten Sie den Assistant Editor neben Ihrer Klasse offen. Ich lade Bild hoch, damit du eine bessere Idee hast. – Lion