Swift, Breite von UICollectionViewCell und UILabel (innerhalb der Zelle) programmgesteuert ändern
Ich habe die Breite einer Zelle (UICollectionViewCell) so festgelegt, dass sie der Breite von UICollectionView entspricht, und ich versuche, genau dasselbe mit dem UILabel zu tun, das in dieser Zelle enthalten ist. Ich denke, der folgende Code erklärt genau, was ich versuche zu erreichen. Also habe ich hier in SO einige Fragen und auch ein paar Tutorials gelesen, aber ich bin mir immer noch nicht sicher, wie ich das erreichen kann.
In ein paar Fragen wurde über die Verwendung von @ gesacollectionViewLayout
aber ich kämpfe wirklich darum, wie ich es in meinem Code verwenden kann. Irgendwelche Ideen? Vielen Dank
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello there!"
// Set cell & label width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth // Works
cell.locationLabel.frame.size.width = collectionViewWidth // Does NOT
Update 1So habe ich folgendes hinzugefügt:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
return CGSize(width: collectionViewWidth, height: 35)
}
Was passiert, ist, dass beim Laden der Ansicht die Breite des UILabel noch klein ist. Wenn ich zu einer anderen Ansicht gehe und dann zurückkehre, ist das 100%. Also muss ich im @ etwas machviewDidLoad()
richtig? Ich benutze bereitsself.collectionView.reloadData()
aber ich denke, das ist nur für Daten.
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("locationCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello UILabel"
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth
cell.locationLabel.frame.size.width = collectionViewWidth
return cell
}