Comment puis-je calculer la hauteur d'une chaîne dans une étiquette particulière (NstextField), pour une largeur fixe donnée? P>
J'ai googlé de différentes méthodes et essayé Cette méthode d'Apple . Cela fonctionne, sauf que la hauteur devient une ligne trop courte pour des chaînes plus longues. Ainsi, il semble y avoir des inexactitudes dans les méthodes actuelles. P>
J'ai aussi eu le même problème avec un autre code que j'ai googlé. p>
Est-ce que quelqu'un ici a un code précis em> pour la recherche de la hauteur de texte (donnée une largeur particulière)? P>
6 Réponses :
Jetez un coup d'œil sur le KIT DE L'APPLICATION NSSTRING ADDITIONS Référence . Il semble que - tailleWITHATtributes: code> ou
- LimiteDrectWithSize: Options: Attributs: CODE> pourrait faire ce que vous voulez. P>
J'ai résolu le problème à l'aide de la chaîne NS (attribuée) String + Geometrics Catégorie fournie à http: // www.sheepysystems.com/sourcecode/sourcecode/sourceStringgeDeRetS.html dans le fichier d'en-tête de cette catégorie est une bonne explication de la façon dont ces choses fonctionnent. Spécifiquement, ils mentionnent que l'on devrait utiliser NStextView au lieu de NStextField car il est pratiquement impossible d'obtenir une hauteur précise pour ces derniers.
Ainsi, j'ai remplacé mon NStextView. Tout d'abord, j'ai fait mon nstextView ressemblant à mon NSTextField avec ce code: p> Puis j'ai eu la hauteur avec ce code: p> NSDictionary *attributes
= [NSDictionary dictionaryWithObjectsAndKeys:
[textView font],NSFontAttributeName,nil];
NSAttributedString *attributedString
= [[NSAttributedString alloc] initWithString:
[textView string] attributes:attributes];
CGFloat height = [attributedString heightForWidth:
[textView frame].size.width];
Grand travail résolvant votre propre problème. Cela ressemble également à des informations utiles. S'il vous plaît n'oubliez pas d'accepter l'une de ces réponses afin que la question ne semble pas «sans réponse».
Oui, je vais faire ça. Mais je dois attendre 2 jours après avoir posté (22 heures à partir de maintenant) avant que je puisse le faire.
[TextView Setfont: [NSFont SystemFontfsize: 13] Plage: NSMakerange (0, [Longueur sale])]; Code> C'est la ligne la plus importante ici. Avec la sortie, vous obtiendrez de mauvaises hauteurs même b> si la vue de texte du générateur d'interface est définie sur la même police et la même taille. J'ai également dû écrire cette ligne après chaque
SetString code> dans ma tableView ou bien les choses seraient géniales.
@Segev fantastique, merci! Je vais toujours obtenir des valeurs de hauteur étrange (deux fois la taille du texte réel). J'ai essayé votre méthode de réglage de la police de l'étiquette après i> définir la chaîne de texte et fonctionnait parfaitement. Bugs étranges dans xcode / macos je suppose ...: /
(une solution à Swift est à la fin de la poste)
J'ai essayé toutes ces méthodes et aucune n'a travaillé pour moi. La manière «officielle» (comme mentionné par OP) était hors du temps pour mon Longue histoire courte, j'ai trouvé cela moyen facile de déterminer la hauteur de mon Ce code a fonctionné pour chaque test cas qui a échoué avec les autres méthodes. J'espère que ça aidera quelqu'un. Il fait toujours me sentir sacrément stupide quand je prends 2 heures pour trouver la solution à un problème apparemment facile p> LÉGÈRE EDIT strong>:. Une fois de plus près cela ne fonctionne que si vous lisez le Je sais que c'est vraiment vraiment em> mal mais à Ce point que je ne me soucie plus. Je veux juste une solution fiable. N'hésitez pas à bowervote-moi ou mieux encore em>: suggérer une meilleure solution. P> NstextField code>. Passer à
NStextView code> était impossible à cause de xcode / ib toujours em> Crashing après avoir ajouté un "NStextView dans un NSScrollView". P>
nstextfield code> mais cela peut être très facilement adapté à la largeur. p>
StringValue Code> du
NStextField code> Avant de demander à la cellule de calculer sa hauteur. J'ai donc ajouté la ligne suivante
myTextField.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(FLT_MAX))).height
Merci pour cette solution facile. Mais pourquoi le casting? C'est totalement bon sans. Pour moi, cela fonctionne sans la ligne "absurde".
Codage vigoureux où dois-je mettre ce code pour travailler? Je mets ceci dans cellforview code> mais ut n'a pas fonctionné
La réponse du codage vigoureux fonctionne si bien! Est-ce vraiment mauvais? Il semble fonctionner parfaitement. Enfin après avoir passé de nombreuses heures d'autres solutions.
Voici ma traduction rapide du code: p>
myTextField.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(FLT_MAX))).height
Merci vraiment à IPHAAW et Enchilada pour cette petite solution vraiment cool. J'ai trouvé si bien fonctionné lors de la configuration des hauteurs de la rangée, etc. que j'ai converti la rapidité d'IPHAAW en quelques extensions NStextField. Profitez
extension NSTextField { func bestheight(text: String, width: CGFloat) -> CGFloat { self.stringValue = text let getnumber = self.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(FLT_MAX))).height return getnumber } } extension NSTextField { func bestwidth(text: String, height: CGFloat) -> CGFloat { self.stringValue = text let getnumber = self.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), CGFloat(FLT_MAX), height)).width return getnumber } }
Ceci est Réponse de Artbykgh pour SWIFT 4 +:
extension NSTextField { func bestHeight(for text: String, width: CGFloat) -> CGFloat { stringValue = text let height = cell!.cellSize(forBounds: NSRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude)).height return height } func bestWidth(for text: String, height: CGFloat) -> CGFloat { stringValue = text let width = cell!.cellSize(forBounds: NSRect(x: 0, y: 0, width: .greatestFiniteMagnitude, height: height)).width return width } }