Eche un vistazo a UIScreen .
p.ej.
CGFloat width = [UIScreen mainScreen].bounds.size.width;
Eche un vistazo a la propiedad applicationFrame si no desea que se incluya la barra de estado (no afectará el ancho).
ACTUALIZACIÓN: Resulta que UIScreen (-bounds o -applicationFrame) no tiene en cuenta la orientación actual de la interfaz. Un enfoque más correcto sería preguntarle a su UIView por sus límites, asumiendo que este UIView haya sido girado automáticamente por su controlador de vista.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGFloat width = CGRectGetWidth(self.view.bounds);
}
Si el controlador de vista no gira automáticamente la vista, deberá verificar la orientación de la interfaz para determinar qué parte de los límites de la vista representa el 'ancho' y la 'altura'. Tenga en cuenta que la propiedad del marco le dará el rect de la vista en el espacio de coordenadas de UIWindow que (por defecto) no tomará en cuenta la orientación de la interfaz.