switch stepper iphone ios ios5 uiswitch

iphone - stepper - Acceso mediante programación al tamaño UISwitch sin agregar componentes



stepper ios (2)

Sí, porque un UISwitch es un control de ancho fijo y establece y determina su propio tamaño, puede simplemente crearlo usando CGRectZero y luego verificar sus dimensiones a través de su marco. Esto funciona en iOS4 e iOS5.

En iOS 4 obtienes un ancho de 94px y en iOS 5 obtendrás un ancho de 79px. Haz esto así:

UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease]; width = mySwitch.frame.size.width;

A continuación, puede usar el valor de ancho para ubicarlo en la vista principal. Hazlo estableciendo la posición x, y deseada en el cuadro UISwitch.

También sugiero que establezca los valores de margen de AutoResizingMask en el UISwitch para que permanezca en la posición en la que lo ubique, independientemente de la orientación o el tipo de dispositivo.

En iOS5 , parece que el ancho de un UISwitch ha cambiado de 94px to 79px . Utilizo el ancho de ese componente para calcular cómo a la derecha, para colocarlo en una UITableViewCell .

¿Hay alguna manera de preguntar, a través de la API de iOS, cuál es el ancho de un UISwitch , SIN agregarlo a una vista todavía?

Mis pensamientos actuales son mantener los dos anchos que ya conozco en las definiciones, y luego verificar con la versión de iOS, y if >=5 debería ser de 79px. Pero eso no funcionará tan bien si el ancho de ese componente cambia de nuevo alguna vez.


Solución Swift:

let size = UISwitch.size()

Con extensión

private var switchSize: CGSize? extension UISwitch { class func size() -> CGSize { if let size = switchSize { return size } else { let view = UISwitch(frame: CGRectZero) switchSize = view.frame.size return view.frame.size } } }