Pregunta

¿Cuál es la mejor manera de centrar una etiqueta en un UIView? Si haces algo como

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(view.frame.origin.x / 2, view.frame.origin.y / 2, 50.0, 50.0)];

A continuación, se está configurando el punto de la etiqueta de origen hasta el centro de la vista. La mejor apuesta sería la de establecer el centro de la vista a ese punto utilizando la propiedad del centro. Así que he intentado usar el siguiente código:

UIView *aView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
aView.backgroundColor = [UIColor darkGrayColor];
CGRect frame = aView.frame;

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 125.0f, 30.0f)];
[aLabel setCenter:CGPointMake(frame.origin.x / 2, frame.origin.y / 2)];

Esto produce una etiqueta que es más o menos fuera de los límites de la vista en la esquina superior izquierda.

¿Fue útil?

Solución

La principal cosa que está haciendo mal está tomando la mitad de los valores, en lugar de la mitad de la tamaños

Sin embargo, no es necesario que incluso calcular que en este caso - acaba de hacer algo como lo siguiente:


UIView *aView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
aView.backgroundColor = [UIColor darkGrayColor];

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 125, 30)];
aLabel.center = aView.center;

(tenga en cuenta, no es necesario para obligar a esas coordenadas flotadores - en este caso la escritura como enteros parece más legible).

Además, es una cuestión de estilo - pero ya que usted ya está usando sintaxis de la propiedad (aView.backgroundColor) se puede también utilizar para la propiedad del centro de demasiado: -)

Otros consejos

Para posicionar cualquier niño centrado horizontalmente en uno de los padres se calcularía su posición como tal;

childX = (parentWidth - childWidth) / 2

(Esto también se aplica a la altura).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top