Программный доступ к размеру UISwitch без добавления компонента - PullRequest
14 голосов
/ 14 октября 2011

В iOS5 кажется, что ширина UISwitch изменилась с 94px to 79px. Я использую ширину этого компонента, чтобы вычислить как справа, чтобы поместить его в UITableViewCell.

Есть ли способ спросить через iOS API, какая ширина UISwitch, БЕЗ добавления его в представление?

Моя текущая мысль - сохранить две ширины, которые я уже знаю в определениях, и затем проверить версию iOS, и if >=5 должно быть 79px. Но это не сработает, если ширина этого компонента когда-нибудь снова изменится.

Ответы [ 2 ]

25 голосов
/ 06 ноября 2011

Да, поскольку UISwitch является элементом управления фиксированной ширины, задает и определяет свой собственный размер, вы можете просто создать его с помощью CGRectZero и затем проверить его размеры через его рамку. Это работает в iOS4 и iOS5.

В iOS 4 вы получите ширину 94 пикселей, а в iOS 5 - 79 пикселей. Вы делаете это так:

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

Затем вы можете использовать значение ширины для соответствующего позиционирования в родительском представлении. Сделайте это, установив желаемое положение x, y в кадре UISwitch.

Также я предлагаю вам установить значения полей AutoResizingMask на переключателе UIS таким образом, чтобы он оставался в том положении, в котором вы его устанавливаете, независимо от ориентации или типа устройства.

0 голосов
/ 07 августа 2016

Быстрое решение:

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