iphone - note - establecer el número máximo de líneas en uilabel
note 8 caracteristicas (4)
Necesito hacer alguna alineación especial con un uilabel.
Quiero que tenga de 1 a 3 líneas, sea cual sea el contenido que tenga. Actualmente lo estoy haciendo algo como esto
label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0f];
label.backgroundColor = [UIColor clearColor];
label.numberOfLines = 0;
label.lineBreakMode = UILineBreakModeWordWrap;
label.frame = CGRectMake(114.0f, 88.0f, 187.0f, 0.0f);
[label sizeToFit];
que funciona muy bien si el texto no es demasiado largo. si la cadena es algo así como @"Hello World"
la UILabel solo tiene 14 puntos de altura, si es un poco más larga, se expande.
ahora quiero que el texto agregue su valor predeterminado ...
puntos triples si el texto es demasiado largo para tres líneas, pero con la configuración en la parte superior se expande a la cuarta línea.
¿Alguien tiene una idea de cómo lograr esto?
Por favor, deje un comentario si algo no está claro.
Editar:
Echa un vistazo a esta aplicación de muestra para ver mi problema (con suerte).
Llame a getStringSize
. StringSize
una variable de tipo StringSize
y decidirá dinámicamente el número de líneas.
struct StringSize {
int numberOfLine;
float height;
float width;
};
typedef struct StringSize StringSize;
+(StringSize)getStringSize:(NSString *)string ofWidth:(float)width FontSize:(id)font {
StringSize sizeForString;
if(string){
CGSize size = CGSizeMake(width, 400.0f);
CGSize appStringSize = [string sizeWithFont:(UIFont *)font constrainedToSize:size lineBreakMode:UILineBreakModeTailTruncation];
CGSize sizeString = [string sizeWithFont:font];
sizeForString.width = appStringSize.width;
sizeForString.height = appStringSize.height;
sizeForString.numberOfLine = (int)(sizeForString.height/sizeString.height);
}else {
sizeForString.width = 0;
sizeForString.height = 0;
sizeForString.numberOfLine = 0;
}
return sizeForString;
}
Pensé en intentarlo:
func heightForStringDrawing(myString: String, myFont:UIFont, myWidth:CGFloat) -> (CGFloat, Int) {
var tc = NSTextContainer(size: CGSize(width: myWidth, height:CGFloat(FLT_MAX)))
var ts = NSTextStorage(string: myString)
var lm = NSLayoutManager()
lm.addTextContainer(tc)
ts.addLayoutManager(lm)
ts.addAttribute(NSFontAttributeName, value: myFont, range: NSMakeRange(0, ts.length))
tc.lineFragmentPadding = 0.0
lm.glyphRangeForTextContainer(tc)
let height = lm.usedRectForTextContainer(tc).height
let lines = Int(Float(height / myFont.lineHeight))
return (height, lines)
}
¡Los comentarios son bienvenidos! Adopté esto de: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html
Solo establece label.numberOfLines = 3;
.
Está algo mal etiquetado, ya que en realidad contiene la cantidad máxima de líneas para mostrar.
label.numberOfLines = 3;
CGSize size = [label.text sizeWithFont:label.font
constrainedToSize:CGSizeMake(SOME_WIDTH,
3 * label.font.lineHeight)
lineBreakMode:UILineBreakModeWordWrap];
label.bounds = CGRectMake(0, 0,
size.width,
size.height);