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

发布于 2024-12-09 23:08:43 字数 321 浏览 2 评论 0原文

iOS5 中,UISwitch 的宽度似乎已从 94px 更改为 79px。我使用该组件的宽度来计算如何将其放在右侧,并将其放置在 UITableViewCell 中。

有没有办法通过 iOS API 询问 UISwitch 的宽度是多少,而不将其添加到视图中?

我目前的想法是保留定义中我已经知道的两个宽度,然后检查 iOS 版本,if >=5 它应该是 79px。但如果该组件的宽度有时再次发生变化,那么这种方法就不起作用了。

In iOS5, it seems the width of a UISwitch has changed from 94px to 79px. I use the width of that component to calculate how for to the right, to place it in a UITableViewCell.

Is there a way to ask, through the iOS API, what the width of a UISwitch is, WITHOUT adding it to a view yet?

My current thoughts are to keep the two widths I already know in defines, and then check against iOS version, and if >=5 it should be 79px. But that won't work as well if the width of that component changes again sometime.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟沫凡尘 2024-12-16 23:08:43

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

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

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

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

另外,我建议您在 UISwitch 上设置 AutoResizingMask 边距值,以便无论设备方向或类型如何,它都保持在您放置的位置。

Yes, because a UISwitch is a control of fixed width and sets and determines its own size, you can simply create it using CGRectZero and then check its dimensions via its frame. This works in iOS4 and iOS5.

On iOS 4 you get a width of 94px and on iOS 5 you will get the width of 79px. You do this like so:

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

You can then use the width value to position accordingly in the parent view. Do that by setting the desired x,y position on the UISwitch frame.

Also I suggest you DO set AutoResizingMask margin values on the UISwitch so that it remains in the position you place it regardless of device orientation or type.

梦归所梦 2024-12-16 23:08:43

快速解决方案:

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
    }
  }
}

Swift solution:

let size = UISwitch.size()

With extension

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
    }
  }
}
穿透光 2024-12-16 23:08:43

从 iOS 6.0 开始,您可以使用 intrinsicContentSize 获取 UISwitch 实例的自然大小。

Starting in iOS 6.0, you can use intrinsicContentSize to get the natural size for a UISwitch instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文