2017-09-25 5 views
1

Je veux rendre la largeur de cellule dynamique par rapport à son contenu. J'ai essayé en calculant la largeur de l'étiquette, puis en l'affectant à la cellule, mais je n'ai pas pu le faire car l'étiquette ne lui renvoie pas la largeur réelle.Largeur dynamique de la cellule de vue de collection - Xamarin iOS

public void UpdateCell(string text) 
{ 
    label.Text = text; 
    this.ContentView.Frame = new CoreGraphics.CGRect(0, 0, label.Frame.Width, this.ContentView.Frame.Height); 
} 
+0

Je pense que vous devriez redimensionner le contentView au bon endroit, voir ici: https://forums.xamarin.com/discussion/72296/collectionview-cell-width-is-not-changing-on-different-screen-sizes –

+0

J'ai vérifié cela mais mon scénario est différent je sais la taille de la cellule reflète un changement si je mets du code dans la méthode GetSize de la classe déléguée mais je ne donnerai que la valeur statique t o cette méthode parce que je ne peux pas accéder à mes vues d'ici – Hasan

Répondre

0

Vous pouvez utiliser GetSizeUsingAttributes pour calculer le CGRect d'une chaîne, vous pouvez ensuite utiliser ce CGRect pour récupérer la largeur de la NSString:

using (var labelString = new NSString(label.Text)) 
{ 
    var size = labelString.GetSizeUsingAttributes(new UIStringAttributes() { Font = label.Font }); 
    ContentView.Frame = new CGRect(0, 0, size.Width, ContentView.Frame.Height); 
} 
+0

J'ai mis à jour le code et j'ai également vérifié que cette fonction renvoie des valeurs différentes par rapport à son contenu mais ma cellule ne reflète toujours pas la largeur différente – Hasan