Estoy tratando de hacer un UIButton
que tenga dos líneas de texto en su titleLabel. Este es el código que estoy usando:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
Cuando intento esto, el texto solo aparece en una línea. Parece que la única forma de lograr más de una línea de texto UIButton.titleLabel
es establecer numberOfLines=0
y usarUILineBreakModeWordWrap
. Pero esto no garantiza que el texto tenga exactamente dos líneas.
UILabel
Sin embargo, usar un plano funciona:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
¿Alguien sabe cómo hacer el UIButton
trabajo con dos líneas? ¿Es la única solución crear un elemento separado UILabel
para contener el texto y agregarlo como una subvista del botón?
objective-c
ios
uibutton
uilabel
comercializador
fuente
fuente
numberOfLines=0
y usaUILineBreakModeWordWrap
, puede obtener varias líneas. El problema con eso es que podría dar más de dos líneas si el texto es demasiado largo. Quiero exactamente dos solitarios con puntos suspensivos al final de la segunda línea (si el texto es demasiado largo).Respuestas:
Respuesta actualizada para versiones de iOS más recientes
Dado que esta es la respuesta aceptada, agregue la respuesta de @ Sean aquí:
Establezca estas propiedades en el titleLabel de su botón.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3 y 4:
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
Respuesta original para una versión anterior de iOS
Si desea 2 líneas de texto encima
UIButton
, debe agregar unaUIlabel
encima que haga precisamente eso.UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)]; titleLabel.font = [UIFont boldSystemFontOfSize:24.0]; titleLabel.text = @"This text is very long and should get truncated at the end of the second line"; titleLabel.numberOfLines = 2; titleLabel.lineBreakMode = UILineBreakModeTailTruncation; [myButton addSubview:titleLabel]; //add label to button instead.
Actualizado para la solución de creación de interfaces
Se agregó la respuesta de @Borut Tomazin para una respuesta más completa. Se actualizó esta parte nuevamente desde que se mejoró la respuesta de @Borut Tomazin.
Puede hacer esto mucho más fácilmente, sin necesidad de código. En Interface Builder, establezca
Line Break
UIButton enWord Wrap
. Entonces puede insertar varias líneas de título. Simplemente presione lasOption + Return
teclas para hacer una nueva línea. También deberá agregar esto al atributo de tiempo de ejecución definido por el usuario en Interface Builder:titleLabel.textAlignment Number [1]
fuente
UILineBreakMode
están obsoletos, utilícelosNSLineBreakMode
en su lugarNo es necesario agregar un UILabel al UIButton. Eso es solo objetos extra y trabajo.
Establezca estas propiedades en el titleLabel de su botón.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
Rápido:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
fuente
intrinsicContentSize
, que aún devuelve una altura que corresponde a una sola línea de texto. Lo arreglé anulando el botónintrinsicContentSize
donde configuré la altura[self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
.Puede hacer esto mucho más fácilmente, sin necesidad de código. En Interface Builder, establezca
Line Break
UIButton enWord Wrap
. Entonces puede insertar varias líneas de título. Simplemente presione lasOption + Return
teclas para hacer una nueva línea. También deberá agregar esto al atributo de tiempo de ejecución definido por el usuario en Interface Builder:titleLabel.textAlignment Number [1]
Es así de simple. Espero eso ayude...
fuente
titleLabel.textAlignment
Atributo de tiempo de ejecución definido por el usuario en Interface Builder y configurándolo en Número = 1 (valor de NSTextAlignmentCenter).button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
fuente
NSString
interiorsetTitle
. ¡WordWrapping lo está haciendo por usted!Para evitar por completo la necesidad de editar el código y, por lo tanto, la necesidad de subclasificar su vista, en Xcode5 y superior puede seguir la sugerencia de Borut Tomazin:
y luego, en los atributos de tiempo de ejecución definidos por el usuario , puede agregar
Ruta de la clave:
titleLabel.textAlignment
Tipo:
Number
Valor:
1
Nota: esto puede no ser completamente "a prueba de futuro" ya que estamos traduciendo la
UITextAlignmentCenter
constante a su valor numérico (y esa constante puede cambiar a medida que se lanzan nuevas versiones de iOS), pero parece seguro en un futuro cercano.fuente
Puede modificar el valor necesario directamente desde Storyboard. Seleccione el botón, vaya al inspector de identidad y agregue el siguiente par clave-valor en la sección "Atributos de tiempo de ejecución definidos por el usuario":
fuente