Estoy tratando de hacer un UIButtonque 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.titleLabeles establecer numberOfLines=0y usarUILineBreakModeWordWrap . Pero esto no garantiza que el texto tenga exactamente dos líneas.
UILabelSin 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 UIButtontrabajo con dos líneas? ¿Es la única solución crear un elemento separado UILabelpara contener el texto y agregarlo como una subvista del botón?
objective-c
ios
uibutton
uilabel
comercializador
fuente
fuente

numberOfLines=0y 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 0Swift 3 y 4:
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0Respuesta original para una versión anterior de iOS
Si desea 2 líneas de texto encima
UIButton, debe agregar unaUIlabelencima 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 BreakUIButton enWord Wrap. Entonces puede insertar varias líneas de título. Simplemente presione lasOption + Returnteclas 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
UILineBreakModeestán obsoletos, utilícelosNSLineBreakModeen 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 0Rápido:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0fuente
intrinsicContentSize, que aún devuelve una altura que corresponde a una sola línea de texto. Lo arreglé anulando el botónintrinsicContentSizedonde 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 BreakUIButton enWord Wrap. Entonces puede insertar varias líneas de título. Simplemente presione lasOption + Returnteclas 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.textAlignmentAtributo 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
NSStringinteriorsetTitle. ¡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.textAlignmentTipo:
NumberValor:
1Nota: esto puede no ser completamente "a prueba de futuro" ya que estamos traduciendo la
UITextAlignmentCenterconstante 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