2017-02-21 1 views
0

La meilleure façon de décrire mes situations est avec des images. Ce que j'ai est une vue qui contient plusieurs UILabel s et UIImage. La boîte rouge est un UILabel et si le contenu est trop grand, il devrait aller à la deuxième ligne. Du storyboard j'ai un cas de travail quand le contenu tient mais le problème est que je ne suis pas sûr de savoir comment gérer le cas quand le dernier (boîte rouge) devrait aller à la deuxième ligne. J'utilise autolayout et cartography.UILabel sur la deuxième ligne si le contenu ne rentre pas dans la première ligne de la vue

Si quelqu'un peut me diriger dans la bonne direction, je serai très reconnaissant.

enter image description here enter image description here

+0

Voulez-vous faire du texte de deux lignes en simple étiquette ? Si c'est le cas, vous pouvez le rendre possible en définissant numberOfLine = 0. Est-ce ce dont vous avez besoin? – Janmenjaya

+0

utilisez contrainte plus grande puis égale et http://stackoverflow.com/a/39888662/6656894 référez-vous à cela –

+0

@Janmenjaya, non, je ne le veux pas. Je veux juste déplacer l'étiquette entière sur la deuxième ligne si ti est trop grand. – charbinary

Répondre

1

Commencez par calculer la largeur du texte en fonction de la position de votre libellé actuel.

Si la largeur du texte est plus que la largeur de l'étiquette actuelle puis voir ma réponse de lien ci-dessous:

Auto Layout how to move the view2 from right to the bottom?

largeur Calculer:

func widthForView1(_ text:String, font:UIFont, height:CGFloat) -> CGFloat 
{ 

let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: your_label_width, height: your_lable_height)) 
label.numberOfLines = 0 
label.lineBreakMode = NSLineBreakMode.byWordWrapping 
label.text = text 
label.font = font 
label.sizeToFit() 
return label.frame.width 
} 
+0

J'ai accepté votre réponse et j'ai réussir à le faire de cette façon, mais comment vérifier correctement si le coin droit d'uilabel ne dépasse pas la largeur parent? – charbinary

+0

Voir les réponses aux questions. –

+0

merci! Je vais vérifier – charbinary

0

Utilisation de View tag peut résoudre ce problème. TagListView est une bibliothèque externe. Lorsque vous ajoutez une vue en tant que sous-classe de taglistView, sa hauteur augmente automatiquement en conséquence.

inscrire dans le fichier pod: pod 'TagListView'

func addTags() { 
     let str1 = "Hi" 
     tagListView.addTag(str1) 
     let str2 = "Helloo" 
      tagListView.addTag(str2) 
     let str3 = "How Are u ? " 
     tagListView.addTag(str2) 
     tagListView.isUserInteractionEnabled = false 
    } 
+0

Je ne suis pas sûr de ce que vous voulez dire exactement. Pourriez-vous s'il vous plaît donner plus d'informations – charbinary

0

Vous ne pouvez pas le faire avec des contraintes seulement. Pour changer la position entière de l'élément sur l'écran, vous devez le faire par programme.

+0

c'est ok. Mais j'aimerais savoir ce qui serait le meilleur, juste et facile. Juste la logique – charbinary

+1

La logique serait la suivante 1. Placez LABEL sur line1 (par exemple dans Storyboard) 2. Définir le texte de LABEL 3. Pensez à sa taille (ne l'adapter ou doit-il être remplacé?) 4. Si la taille == OK -> laissez-le tel quel else -> remplacez l'étiquette Pour cela, vous devrez peut-être stocker certaines contraintes en tant que propriétés (par exemple, la contrainte supérieure de LABEL et la contrainte supérieure de la vue Line2 2) – Evgeniy