iphone - guia - qgis manual
¿Cómo alinear el texto de UILabel desde la parte inferior? (7)
Aquí hay dos maneras de hacer eso ...
1. Primero establezca numberOfLines
en 0 y luego use la propiedad UILabel
de UILabel
para que su UILabel
muestre con su contentSize
.
yourLabel.numberOfLines = 0;
[yourLabel sizeToFit];
Ver más información en este enlace: alinear verticalmente el texto dentro de una UILabel
2. Otra opción es tomar UITextField
lugar de UILabel
y establecer userInteractionEnabled
en NO
como abajo ...
[yourTextField setUserInteractionEnabled:NO];
y luego establezca la propiedad contentVerticalAlignment
en la parte inferior como abajo ...
[yourTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
ACTUALIZAR
Además, con UITextField
, no podemos lograr múltiples líneas. Entonces, en lugar de eso, podemos utilizar UITextView
y establecer su userInteractionEnabled
en NO
. Luego, usa el código de abajo para alinearlo por la parte inferior.
CGFloat topCorrect = ([label bounds].size.height - [label contentSize].height);
topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect);
label.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
Cómo se puede alinear la UILabel
desde abajo. Digamos que mi etiqueta puede contener tres líneas de texto. Si el texto ingresado es una sola línea, entonces esta línea debe estar en la parte inferior de la etiqueta. Consulte la imagen de abajo para una mejor comprensión. El área naranja es el marco completo de la etiqueta. Actualmente tiene una línea y está alineada en el centro. Entonces, lo que quiero es que siempre se alinee el fondo, independientemente de cuántas líneas.
Por favor sugiera sus ideas.
Gracias.
Otra opción: usar una etiqueta para el color de fondo, la llamo una etiqueta original y otra para el texto, llamada etiqueta de texto en mi ejemplo. Luego calcula la altura y la coordenada Y para textLabel:
[textLabel sizeToFit];
int height = textLabel.frame.size.height;
int yCoord = originalLabel.frame.origin.y +
originalLabel.frame.size.height - height;
textLabel.frame = CGRectMake( originalLabel.frame.origin.x, yCoord,
textLabel.frame.size.width, height);
Puedes subclase UILabel
y anulando el método:
- (void)drawTextInRect:(CGRect)rect
llame a super drawTextInRect
con el rectángulo donde desee utilizar.
Solo establezco una restricción inferior a la vista superior en IB, que funciona para mí sin usar código y también el número de líneas para una restricción máxima.
Subclase UILabel
@interface Label : UILabel
@end
Luego anula drawTextInRect como tal
@implementation Label
- (void)drawTextInRect:(CGRect)rect
{
if(alignment == top) {
rect.size.height = [self sizeThatFits:rect.size].height;
}
if(alignment == bottom) {
CGFloat height = [self sizeThatFits:rect.size].height;
rect.origin.y += rect.size.height - height;
rect.size.height = height;
}
[super drawTextInRect:rect];
}
@end
Tuve el mismo problema. Aquí es cómo hice para alinear el texto a la parte inferior de mi UILabel:
- (void)alignLabel:(UILabel *)l withText:(NSString *)text verticalAlignOption:(int)vertAlign{
CGSize stringSize = [text sizeWithFont:l.font constrainedToSize:l.frame.size lineBreakMode:l.lineBreakMode];
switch (vertAlign) {
case 0: // align = top
l.frame = CGRectMake(l.frame.origin.x,
l.frame.origin.y,
l.frame.size.width,
stringSize.height
);
break;
case 1: // align = bottom
l.frame = CGRectMake(l.frame.origin.x,
(l.frame.origin.y + l.frame.size.height) - stringSize.height,
l.frame.size.width,
stringSize.height
);
break;
case 2: // align = middle
// default
break;
}
l.text = text;
}
Ah, simplemente llama al método como este para alinearlo con el fondo:
[self alignLabel:self.mediaTitle withText:@"My text to align" verticalAlignOption:1];
Versión Swift 4.2 utilizando la propiedad contentMode
para establecer la parte superior e inferior:
class VerticalAlignedLabel: UILabel {
override func drawText(in rect: CGRect) {
var newRect = rect
switch contentMode {
case .top:
newRect.size.height = sizeThatFits(rect.size).height
case .bottom:
let height = sizeThatFits(rect.size).height
newRect.origin.y += rect.size.height - height
newRect.size.height = height
default:
()
}
super.drawText(in: newRect)
}
}
A continuación, configure su etiqueta de esa manera:
let label: VerticalAlignedLabel = UILabel()
label.contentMode = .bottom