objective-c ios7

objective c - iOS 7 sizeWithAttributes: reemplazo para sizeWithFont: constrainedToSize



objective-c ios7 (9)

Así es como lo hice:

// Get a font to draw it in UIFont *font = [UIFont boldSystemFontOfSize: 28]; CGRect textRect; NSDictionary *attributes = @{NSFontAttributeName: font}; // How big is this string when drawn in this font? textRect.size = [text sizeWithAttributes:attributes]; // Draw the string [text drawInRect:textRect withAttributes:attributes];

¿Cómo se devuelve un CGSize de texto multilínea del nuevo método iOS 7 sizeWithAttributes?

Me gustaría que esto produzca los mismos resultados que sizeWithFont: constrainedToSize.

NSString *text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus eu urna quis lacus imperdiet scelerisque a nec neque. Mauris eget feugiat augue, vitae porttitor mi. Curabitur vitae sollicitudin augue. Donec id sapien eros. Proin consequat tellus in vehicula sagittis. Morbi sed felis a nibh hendrerit hendrerit. Lorem ipsum dolor sit." CGSize textSize = [text sizeWithAttributes:@{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:16.0] }];

Este método solo produce la altura para una sola línea de texto.


Bueno, puedes probar esto:

NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]}; // NSString class method: boundingRectWithSize:options:attributes:context is // available only on ios7.0 sdk. CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];


Como alternativa, si está viendo UITextView , siempre puede usar el método NSLayoutManager :

CGSize textSize = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size;

También puede encontrar la altura de la línea para una fuente determinada de la siguiente manera:

UIFont *font; CGFloat lineHeight = font.lineHeight;


Este es mi método para manejar ambas situaciones, va en una categoría NSString .

- (CGSize) sizeWithFontOrAttributes:(UIFont *) font { if (IS_IOS7) { NSDictionary *fontWithAttributes = @{NSFontAttributeName:font}; return [self sizeWithAttributes:fontWithAttributes]; } else { return [self sizeWithFont:font]; } }


Para Xamarin.iOS:

UIFont descriptionLabelFont = UIFont.SystemFontOfSize (11); NSString textToMeasure = (NSString)DescriptionLabel.Text; CGRect labelRect = textToMeasure.GetBoundingRect ( new CGSize(this.Frame.Width, nfloat.MaxValue), NSStringDrawingOptions.UsesLineFragmentOrigin, new UIStringAttributes () { Font = descriptionLabelFont }, new NSStringDrawingContext () );


Si tiene el texto, la fuente, el número de líneas y el ancho de su conjunto de etiquetas, este método devuelve el tamaño de su etiqueta:

myLabel.numberOfLines = 0; CGSize size = [myLabel sizeThatFits:CGSizeMake(myLabel.frame.size.width, CGFLOAT_MAX)];`


Swift 2.3:

let attributes = [NSFontAttributeName:UIFont(name: "HelveticaNeue", size: 14)] let rect = NSString(string: textToMeasure).boundingRectWithSize( CGSizeMake(width, CGFLOAT_MAX), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes, context: nil)


[Como nuevo usuario, no puedo publicar un comentario en la respuesta de @ testing, pero hacer que su respuesta (para xamarin.ios) sea más útil]

Podemos devolver un CGRect y solo usar el parámetro de altura para el elemento de la interfaz gráfica de usuario que estamos apuntando a UIButton, etc. Mediante los parámetros que necesitamos a continuación.

public CGRect GetRectForString(String strMeasure, int fontSize, nfloat guiItemWidth) { UIFont descriptionLabelFont = UIFont.SystemFontOfSize (fontSize); NSString textToMeasure = (NSString)strMeasure; CGRect labelRect = textToMeasure.GetBoundingRect ( new CGSize(guiItemWidth, nfloat.MaxValue), NSStringDrawingOptions.UsesLineFragmentOrigin, new UIStringAttributes () { Font = descriptionLabelFont }, new NSStringDrawingContext () ); return labelRect; }

header_Revision.Frame = new CGRect (5 , verticalAdjust , View.Frame.Width-10 , GetRectForString( header_Revision.Title(UIControlState.Normal) , 18 , View.Frame.Width-10 ).Height );


CGSize stringsize = [lbl.text sizeWithAttributes: @{NSFontAttributeName:[UIFont fontWithName:FontProximaNovaRegular size:12.0]}]; CGSize adjustedSize = CGSizeMake(ceilf(stringsize.width), ceilf(stringsize.height));

use el método ceilf para administrar correctamente