Я пытаюсь использовать appearance
для установки общих макетов / дизайнов по умолчанию в приложении. Для UISwitch
, чтобы установить цвет off
не только на границе, необходимо выполнить настройку (см. Изменение цвета переключателя UIS в состоянии «выключено» ):
uiswitch.backgroundColor = .red
uiswitch.layer.cornerRadius = 16
Всякий раз, когда я делаю:
let toggle = UISwitch()
toggle.tintColor = offColor // see "global vars and methods below"
toggle.onTintColor = onColor
toggle.backgroundColor = offColor
toggle.layer.cornerRadius = 16
view.addSubview(toggle)
constraintToCenter(toggle: toggle)
Это работает, и я получаю:

Но если я использую appearance
, как это:
let toggle = UISwitch()
view.addSubview(toggle)
constraintToCenter(toggle: toggle)
UISwitch.newSetUpDefaultAppearance(onColor: onColor, offColor: offColor)
public extension UISwitch {
class func newSetUpDefaultAppearance(onColor: UIColor, offColor: UIColor) {
let defaultAppereance = appearance(whenContainedInInstancesOf: [])
defaultAppereance.onTintColor = onColor
defaultAppereance.backgroundColor = offColor
defaultAppereance.tintColor = offColor
defaultAppereance.layer.cornerRadius = 16.0
print (defaultAppereance.layer.cornerRadius) // prints 0.0
}
}
Я получаю:

Глобальные переменные и методы:
let onColor = UIColor.black
let offColor = UIColor.gray
func constraintToCenter(view: UIView) {
toggle.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([toggle.centerXAnchor.constraint(equalTo: view.centerXAnchor), toggle.centerYAnchor.constraint(equalTo: view.centerYAnchor)])
}
Кто-то видит, что я делаю неправильно?