2017-07-12 2 views
0

Ich habe jetzt fast einen ganzen Tag damit zu kämpfen und kann keine Lösung finden. Ich versuche, eine UICollectionView in einem View-Controller zu erstellen, der Zellen nur mit einem einzigen Label in jedem von ihnen hat. Allerdings kann ich das Label nicht als Unteransicht der Zelle hinzufügen, egal was ich mache. Hier ist der Code, den ich in meinem Haupt-View-Controller haben:Wie richte ich ein Label in meiner UICollectionView-Zelle ein?

var collectionView: UICollectionView! 

    func configureCollectionView() 
    { 
     let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
     layout.scrollDirection = .horizontal 
     layout.itemSize = CGSize(width: 50, height: 20) 

     let y = interestsUnderline.frame.origin.y + 5 
     let width = interestsUnderline.frame.width 
     let frame = CGRect(x: 40, y: y, width: width, height: 30) 
     collectionView = UICollectionView(frame: frame, collectionViewLayout: layout) 

     collectionView?.dataSource = self 
     collectionView?.delegate = self 
     collectionView?.register(InterestsCell.self, forCellWithReuseIdentifier: "InterestsCell") 
     collectionView?.showsHorizontalScrollIndicator = false 
     view.addSubview(collectionView!) 
    } 

Ich nenne configureCollectionView() von viewDidLayoutSubviews. Dies ist der Code, den ich in meiner Sammlungsansichtszelle habe.

class InterestsCell: UICollectionViewCell { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     setupViews() 
    } 

    let label: UILabel = { 
     let label = UILabel() 
     label.text = "Hello" 
     label.textColor = .white 
     label.translatesAutoresizingMaskIntoConstraints = false 
     return label 
    }() 

    func setupViews() { 
     contentView.backgroundColor = .red 
     contentView.addSubview(label) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

} 

Immer wenn ich die Zelle entziehe, bekomme ich die richtige Größe der Zelle und die richtige Farbe. Aber wenn ich in der setupViews-Funktion meiner Zelle Einschränkungen für das Label festlege, wird der View-Controller nicht einmal ganz geöffnet. Wenn ich die Einschränkungen nicht festlege, ist das Label nicht vorhanden. Ich bin mir nicht sicher, was ich zu diesem Zeitpunkt tun soll und ich würde mich über Hilfe freuen. Vielen Dank!

+0

Sie müssen Ihrem Etikett Einschränkungen hinzufügen. Zeigen Sie den Code, wo Sie das versucht haben, und es hat nicht funktioniert. – dan

+0

@dan Hier ist es label.centerXAnchor.constraint (equalTo: contentView.centerXAnchor) .isActive = true label.centerYAnchor.constraint (equalTo: contentView.centerYAnchor) .isActive = true –

Antwort

0

nahm ich einen Blick auf Ihre oben Schnipsel und was ich gefunden habe ist, dass Sie haben nicht die Frame müssen Sie die Frame Ihrer UILabel

let label: UILabel = { 
      let label = UILabel() 
      label.frame = CGRect(x: 40, y: 100, width: self.view.frame.width, height: 30) 
      label.text = "Hello" 
      label.textColor = UIColor.red 
      label.translatesAutoresizingMaskIntoConstraints = false 
      return label 
     }() 

Hope this helfen Ihnen

+0

@ Maddy ヅ ヅ EDIT: Dies tut nicht arbeite, weil ich aus irgendeinem Grund nicht auf self.view von dieser Schließung zugreifen kann. Ich kann es aber auf eine Konstante setzen. Wenn der Beschriftungstext jedoch breiter als der Zellenrahmen ist, wird ein Teil des Textes abgeschnitten. Gibt es eine Möglichkeit, die Größe des Zellenrahmens dynamisch zu ändern? –

+0

@AteethKosuri collectionView mit sizeForItemAtIndexPath-Delegat können Sie die geschätzte Breite/Höhe der Zelle berechnen, und Sie können die Größe der Zellenbasis darauf setzen –

+0

@ Maddy ヅ ヅ Wenn ich den Rahmen der Bezeichnung auf eine Konstante setzen und die sizeForItemAtIndexPath verwenden Funktion, um die Breite des Etiketts zu überprüfen, damit ich die Zellenbreite einstellen kann, bleibt die Breite des Etiketts als diese Konstante, so dass sich nichts ändert. –

0

einstellen Da Ihr Das Projekt verwendet automatische Layoutbeschränkungen, die Sie für das Etikett festlegen müssen:

func setupViews() { 
    contentView.backgroundColor = .red 
    contentView.addSubview(label) 
    label.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true 
    label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true 
} 
Verwandte Themen