Largeur en pixels du texte dans un UILabel
J'ai besoin de tirer un UILabel barré par. Donc je sous-classé UILabel et mis en œuvre comme suit:
@implementation UIStrikedLabel
- (void)drawTextInRect:(CGRect)rect{
[super drawTextInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context,CGRectMake(0,rect.size.height/2,rect.size.width,1));
}
@end
Ce qui se passe est que le UILabel est barré avec une ligne aussi longtemps que l'ensemble de l'étiquette, mais le texte peut être plus courte.
Est-il un moyen pour déterminer la longueur du texte en pixels, de sorte que la ligne peut être convenablement établi?
Je suis aussi ouvert à d'autres solutions, si connu 🙂
Meilleur,
Erik
Vous devez vous connecter pour publier un commentaire.
NSString a un sizeWithAttributes: méthode qui peut être utilisée pour cela. Elle renvoie une CGSize de la structure, de sorte que vous pourriez faire quelque chose de similaire à la suivante pour trouver la largeur du texte à l'intérieur de votre étiquette.
iOS 7 et supérieur
iOS <7
Avant iOS7, vous avez à utiliser le sizeWithFont: méthode.
UILabel a une police de la propriété que vous pouvez utiliser dynamiquement pour obtenir les détails de police de votre étiquette comme je le fais ci-dessus.
Espère que cela aide 🙂
label.attributedText.size
.Une meilleure solution, ici, dans Swift:
Mise à jour:
Pour
Swift 3/4
:Vieille Réponse:
let sanskritLabel = UILabel(frame: CGRectMake(0, 120, sanskritStringSize.width, sanskritStringSize.height))
espère que cet exemple peut vous aider (iOS > 7)