以编程方式访问 UISwitch 大小而不添加组件
Posted
技术标签:
【中文标题】以编程方式访问 UISwitch 大小而不添加组件【英文标题】:Programmatically access UISwitch size without adding component 【发布时间】:2011-10-14 07:58:12 【问题描述】:在ios5
中,UISwitch
的宽度似乎已从 94px to 79px
更改。我使用该组件的宽度来计算如何向右,将其放置在 UITableViewCell
中。
有没有办法通过 iOS API 询问 UISwitch
的宽度是多少,而无需将其添加到视图中?
我目前的想法是保留我在定义中已经知道的两个宽度,然后检查 iOS 版本,if >=5
应该是 79px。但是,如果该组件的宽度在某个时候再次发生变化,那将无法正常工作。
【问题讨论】:
【参考方案1】:是的,因为 UISwitch 是一个固定宽度的控件并设置和确定自己的大小,您可以简单地使用 CGRectZero 创建它,然后通过它的框架检查它的尺寸。这适用于 iOS4 和 iOS5。
在 iOS 4 上,宽度为 94 像素,在 iOS 5 上,宽度为 79 像素。你这样做:
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
width = mySwitch.frame.size.width;
然后您可以使用宽度值在父视图中相应定位。通过在 UISwitch 框架上设置所需的 x,y 位置来做到这一点。
另外我建议您在 UISwitch 上设置 AutoResizingMask 边距值,以便无论设备方向或类型如何,它都保持在您放置的位置。
【讨论】:
或者为了将 UISwitch 定位在单元格中,您可以简单地将 Switch 添加为 AccessoryView。例如。 myTableViewCell.accessoryView = mySwitch.这样做的另一个好处是始终将其定位在右侧并正确处理其大小,而不管 iOS 版本如何。【参考方案2】:快速解决方案:
let size = UISwitch.size()
有扩展名
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
【讨论】:
【参考方案3】:从 iOS 6.0 开始,您可以使用 intrinsicContentSize
获取 UISwitch
实例的自然大小。
【讨论】:
以上是关于以编程方式访问 UISwitch 大小而不添加组件的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 iPhone Setting Bundle 中以编程方式添加 UISwitch?
Swift:以编程方式添加视图时,UIScrollView 的可滚动内容大小不明确,而不使用 IB