2009-04-09 16 views
8

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

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

entonces estás estableciendo el punto de la etiqueta de origen hasta el centro de la vista. La mejor opción sería establecer el centro de la vista en ese punto usando 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)]; 

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

Respuesta

18

La principal cosa que está haciendo mal está tomando la mitad de los origen valores, en lugar de la mitad de los 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; 

(nota, 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 también :-)

6

Para colocar cualquier niño centrado horizontalmente en un elemento primario, se calcularía su posición como tal;

childX = (parentWidth - childWidth)/2 

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

+0

Gracias Andrew. ¿Dónde crees que son los mejores recursos para aprender estas ecuaciones de tipo geométrico? simplemente geometría? – Coocoo4Cocoa

+4

Para ser sincero, no sé, algo así es matemática básica: tiene una cantidad de espacio establecida (parentWidth - childWidth) que desea distribuir en dos lados (/ 2). –

Cuestiones relacionadas