2017-09-22 8 views
0

J'ai une étiquette et j'ai ajouté une chaîne qui lui est attribuée. La chaîne est,Pourquoi mon label est tronqué même si le nombre de lignes est 0 et aucune contrainte de hauteur?

let nameText = "My name is Shreesha and Im an iOS developer. My name is Shreesha and Im an iOS developer."`My name is Shreesha and Im an iOS developer. My name is Shreesha and Im an iOS developer.` 

Dans ce texte, je suis en train d'ajouter un * au début du texte alors j'ai utilisé une chaîne attribué et le code ressemble à ceci,

func attributedTextForFeeApplies() -> NSAttributedString { 
    let attributedText = NSMutableAttributedString(string: "* " + nameText) 
    attributedText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.blue, range: NSMakeRange(0, attributedText.length)) 
    attributedText.addAttribute(NSAttributedStringKey.font, value: UIFont.systemFont(ofSize: 10), range: NSMakeRange(0, attributedText.length)) 

    let superScriptString = "* " 

    attributedText.addAttribute(NSAttributedStringKey.baselineOffset, value: 2, range: NSMakeRange(0, superScriptString.characters.count)) 
    attributedText.addAttribute(NSAttributedStringKey.font, value: UIFont.systemFont(ofSize: 9), range: NSMakeRange(0, superScriptString.characters.count)) 
    attributedText.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.blue, range: NSMakeRange(0, superScriptString.characters.count)) 

    let superscriptAttributedString = attributedText 
    let paragraph = NSMutableParagraphStyle() 
    paragraph.lineBreakMode = .byTruncatingTail 
    superscriptAttributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraph, range: NSMakeRange(0, superscriptAttributedString.length)) 

    return superscriptAttributedString 
} 

Je donnai les contraintes à l'étiquette comme celui-ci,

enter image description here

Même si je donne un nombre de lignes à 0 et pas hei ght contrainte l'étiquette tronque comme celui-ci, enter image description here

Mais quand je ne pas utiliser cette ligne de code attributedText.addAttribute(NSAttributedStringKey.baselineOffset, value: 2, range: NSMakeRange(0, superScriptString.characters.count)) il est bien comme ça fonctionne,

enter image description here

Et si ajouter * dans la milieu (sans enlever attributedText.addAttribute(NSAttributedStringKey.baselineOffset, value: 2, range: NSMakeRange(0, superScriptString.characters.count))), il fonctionne très bien, mais ne fonctionne tout simplement pas si je l'utilise au début du texte,

Capture d'écran:

enter image description here

Et cela fonctionne aussi si j'augmente la taille de la police.

Je pense qu'il y a un problème avec NSAttributedString et sinon je veux savoir quel est le problème. Quelqu'un pourrait-il m'aider s'il vous plaît.

+0

beacuse de ce laisser superscriptAttributedString = attributedText let paragraphe = NSMutableParagraphStyle() paragraph.lineBreakMode = .byTruncatingTail superscriptAttributedString.addAttribute (NSAttributedStringKey.paragraphStyle, valeur: paragraphe, plage: NSMakeRange (0, superscriptAttributedString.length)) votre lable peut mettre en nombre de lignes –

+0

Je n'ai pas eu ce que vous avez dit (votre lable peut mettre en nombre de lignes?). Pourriez-vous élaborer? –

+0

NSMutableParagraphStyle cela signifie que votre ligne unique convertir en plusieurs que si vous voulez envoyer un texte sur une seule ligne ne pas utiliser NSMutableParagraphStyle. –

Répondre

0

Votre problème est que dès que vous affectez une chaîne attribuée, vous devez recalculer la hauteur. mais il y a une solution rapide dont vous n'avez pas besoin pour le calculer vous-même. donnez à l'étiquette une rupture de ligne de force à la fin de votre étiquette, auquel cas elle doit re calculer automatiquement la hauteur.

// see the \n at the end of your string that will cause the label to recalculate it's height. 
let nameText = "My name is Shreesha and Im an iOS developer. My name is Shreesha and Im an iOS developer."`My name is Shreesha and Im an iOS developer. My name is Shreesha and Im an iOS developer. \n" 
+0

Ma question est-elle supposée fonctionner même avec l'implémentation actuelle. Mais il semble qu'il y ait un problème avec 'NSAttributedString' ou' UILabel'. Et je ne veux pas avoir une solution rapide où la mise en œuvre actuelle devrait fonctionner. Mais pour l'instant, je n'ai ajouté aucune chaîne attribuée dans l'application juste pour libérer la construction dès que possible.Et oui votre suggestion fonctionne. Mais je veux savoir quel est le problème et je veux qu'il fonctionne avec la mise en œuvre actuelle sans aucune modification. –

+0

Je vous ai déjà expliqué que Xcode a un bug qui ne peut pas calculer la taille exacte de la attributeString dans le cas où vous essayez de changer le décalage d'un caractère. Dans ce cas, vous devez calculer la hauteur de l'étiquette en fonction de votre chaîne. –