Swift, Modifier la largeur de UICollectionViewCell et UILabel(à l'intérieur de la cellule) par programmation
J'ai fixer la largeur d'une cellule(UICollectionViewCell), être égal à la largeur de la UICollectionView et je suis en train de faire exactement la même chose avec le UILabel qui est inclus à l'intérieur de la cellule. Je pense que le code ci-dessous explique exactement ce que je suis en train de réaliser. Donc, j'ai lu quelques question ici, dans la et aussi un couple de tutoriels mais je ne suis toujours pas sûr de savoir comment je peut l'atteindre.
Dans un couple de questions qu'il a dit à propos de l'utilisation collectionViewLayout
mais j'ai vraiment du mal sur la façon de l'utiliser dans mon code. Des idées? Merci!!!!
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
Mise à jour de 1
J'ai donc ajouté ce qui suit:
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)
}
Ce qui se passe est que lorsque la vue est chargé de la UILabel la largeur est encore petit. Si je vais à un autre point de vue et, à leur retour, alors il est de 100%. Donc, je dois faire quelque chose dans le viewDidLoad()
droit? Je suis déjà en utilisant self.collectionView.reloadData()
mais je suppose que c'est uniquement pour les données.
Mise à jour 2
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
}
OriginalL'auteur manosim | 2014-12-28
Vous devez vous connecter pour publier un commentaire.
Il ne fonctionne pas parce que le temps de cette méthode est appelée, l'affichage de la collection sait déjà comment grand la cellule doit être parce qu'il a eu de la méthode du délégué:
C'est là que vous devez être la définition de la taille de vos cellules.
Comment faites-vous la taille de l'étiquette à l'intérieur de la cellule?
J'ai ajouté le code exact de la question. Donc, fondamentalement, je suis en utilisant
cell.locationLabel.frame.size.width
.Placer un point d'arrêt sur cette ligne et voir ce que les tailles qui en sortent sont. Je pense que vous verrez ce qui est le problème.
Résolu! Donc le code que vous avez suggéré définit la largeur de la cellule. La question j'ai eu après l'ajout de votre code, est que j'ai dû mettre le UILabel largeur. Je l'ai fait en ajoutant des contraintes de la MainStoryboard(Sélectionné l'étiquette et a ajouté 0 espacement à partir de la gauche & droit du plus proche voisin)! Pensé que je devrais laisser d'autres personnes savent comment ils peuvent le faire! Merci!
OriginalL'auteur Abizern