Obtenga las dimensiones reales de la vista de iOS

¿Cómo obtendré las dimensiones reales de una vista o subvista que controlo? Por ejemplo:

UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)]; [self addSubview:firstView]; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 20, 230, 120)]; [firstView addSubview:button]; 

Como puede ver, mi object de button supera las dimensiones de la vista a la que se agrega.

Con esto es la mente (suponiendo que hay muchos objects que se agregan como subvenciones), ¿cómo puedo determinar el ancho y alto real de firstView ?

Si desea que el button tenga el mismo ancho y alto que la primera vista, debe usar la propiedad de límites de UIView así:

 UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)]; [self addSubview:firstView]; UIButton *button = [[UIButton alloc] initWithFrame:firstView.bounds]; [firstView addSubview:button]; 

Para get el ancho / alto de firstView, puede hacer algo como esto:

 CGSize size = firstView.bounds.size; NSInteger width = size.width; NSInteger height = size.height; 

La primera vista realmente es de 200 x 100. Sin embargo, las vistas en el interior no se recortan a less que use clipsToBounds .

Una solución preferible a su problema es dejar de agregar vistas que excedan las dimensiones o detener el cambio de tamaño de las vistas para que desborder el espacio disponible, según corresponda.

(Para calcular realmente los límites completos, incluidas todas las subvenciones en la jerarquía, no es difícil, solo un montón de trabajo que en realidad no lo llevará a ninguna parte. UIView permite que las vistas sean más grandes que sus contenedores, pero no necesariamente cualquier garantía sobre lo que funcionará correctamente y es probable que sea una fuente de errores si se aprovechan. El motivo de clipsToBounds es probablemente que el recorte es costoso pero necesario durante la animation, donde las subvenciones pueden moverse temporalmente fuera de los límites con el fin de get un efecto antes de que se eliminen de la vista).

firstview.frame.size.width firstview.frame.size.height