以编程方式访问UISwitch大小而不添加组件

pol*_*sen 14 iphone uiswitch ios ios5

iOS5,似乎a的宽度UISwitch已经改变94px to 79px.我使用该组件的宽度来计算向右的方式,将其放在一个UITableViewCell.

有没有办法通过iOS API询问a的宽度UISwitch是什么,而不是将它添加到视图中?

我目前的想法是保持我已经知道的两个宽度定义,然后检查iOS版本,if >=5它应该是79px.但是,如果该组件的宽度有时会再次发生变化,那么这也行不通.

Cli*_*udo 25

是的,因为UISwitch是固定宽度的控件并设置和确定自己的大小,您可以使用CGRectZero创建它,然后通过其框架检查其尺寸.这适用于iOS4和iOS5.

在iOS 4上,您获得94px的宽度,在iOS 5上,您将获得79px的宽度.你这样做:

UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
width = mySwitch.frame.size.width;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用宽度值在父视图中进行相应的位置.通过在UISwitch框架上设置所需的x,y位置来实现.

另外,我建议你在UISwitch上设置AutoResizingMask边距值,这样无论设备方向或类型如何,它都会保持在你放置它的位置.

  • 或者,为了将UISwitch定位在单元格中,您只需将Switch添加为AccessoryView即可.例如.myTableViewCell.accessoryView = mySwitch.这样做的另一个好处是,无论iOS版本如何,始终将其定位到正确并正确处理其大小. (6认同)
  • 此策略也适用于iOS 7上的UISwitch. (3认同)