settitle guidelines buttons apple ios cocoa-touch uibutton

guidelines - ¿Cómo puedo establecer mediante programación la alineación vertical de un UIButton-iOS?



uicontrolstate swift (5)

Sé cómo establecer la alineación vertical de un botón con IB; ver here Pero no puedo hacerlo programáticamente ... Esta es una de las cosas que he intentado:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 110, 130)]; [button setTitle:@"Align" forState:UIControlStateNormal]; button.backgroundColor = [UIColor whiteColor]; button.titleLabel.textColor = [UIColor grayColor]; [button setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom]; [self.view addSubview:button]; [button release];

También he intentado inserciones ...

Pero la alineación no cambiará.

Tenga en cuenta que quiero mantener el estilo personalizado del botón (no quiero el aspecto y la configuración predeterminados).


El problema fue el uso

button.titleLabel.textColor = [UIColor grayColor];

en lugar de

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

En otra parte de mi código todavía tengo problemas para alinear el texto verticalmente, pero tengo el ejemplo básico en marcha, por lo que debería poder tener la versión más complicada si la veo más. Quizás haya otros métodos que estoy usando como button.titleLabel.textColor que hacen que la alineación vertical no funcione ...

Actualizar El problema original era en realidad porque mi botón era demasiado corto (altura del botón).

La palabra husband está en el botón, que actualmente está alineado verticalmente con la parte inferior. Pero como la altura del botón no es suficiente, no es obvio. A pesar de que el valor predeterminado de las inserciones de título y las inserciones de contenido son cero, no parece que el título se pueda alinear con la parte inferior. A mí me parecen unos 5 píxeles. Probé con una fuente más pequeña para asegurarme de que esto es correcto.

Desafortunadamente, alinear verticalmente el texto en la parte superior no parece cambiar nada ...


Encontré una mejor manera que funciona para mí. Estoy usando una fuente personalizada por lo que la alineación se desvaneció un poco por algunos como en la respuesta de Lindon Fox antes mencionada.

Dentro de ti subclase UIButton:

- (void)layoutSubviews { [super layoutSubviews]; if (UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, self.titleEdgeInsets)) { // adjust top, left bottom, and right to fit your needs self.titleEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right); } }

Estoy de acuerdo con las otras respuestas de que el uso de contentVerticalAlignment establecido en UIControlContentVerticalAlignmentCenter también es una buena idea.


Puede alinear (horizontal y verticalmente) el texto del botón de esta manera:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 70)]; button.backgroundColor = [UIColor whiteColor]; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; button.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom; [button setTitle:@"Align" forState:UIControlStateNormal]; [self.container addSubview:button];


Puede manipular fácilmente la etiqueta de texto interno de UIButton. Aquí cómo puedes hacerlo:

  1. poner el texto de los botones a @ "" (cadena vacía)
  2. Crea un nuevo UILabel y ajusta su marco
  3. Insertar UILabel creado dentro de la vista de botones como subvista
  4. Está hecho. Ahora puede establecer la posición interna de UILabel mediante programación cambiando su propiedad de marco.

contentVerticalAlignment es el camino a seguir. Podría ser cómo estás creando el botón. Prueba esto:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(10, 10, 110, 130); // rest of your code // don''t release button explicitly