无法使 UISwitch 约束起作用 - swift 4
Cant get UISwitch constraints to work - swift 4
我正在尝试以编程方式创建 UISwitch,但出于某种原因,我无法使用任何约束。如果我不使用任何约束,则会在左上角创建 UISwitch。
我尝试通过在声明我的开关时添加约束来创建 UISwitch,这确实将开关移到了不同的地方。然而,这是一个问题,因为我希望它在我看来受到其他项目的约束。
class cameraController: UIViewController {
var switchOnOff: UISwitch {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}
}
extension cameraController{
@objc func switchButton(_ sender:UISwitch){
if (sender.isOn == true){
print("UISwitch state is now ON")
}
else{
print("UISwitch state is now Off")
}
}
}
extension cameraController {
private func setupLayouts() {
view.addSubview(switchOnOff)
switchOnOff.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
switchOnOff.topAnchor.constraint(equalTo: photosButtonIcon.bottomAnchor, constant: 20).isActive = true
}
}
我希望能够将开关的约束添加到我的 setupLayouts 扩展中,而不是在声明开关时。
当 运行 上面的代码是我得到的错误是:
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
我在 setupLayouts 扩展的约束的第一行收到此错误。
任何帮助都会很棒。
你需要一个懒惰的 var 在这个块中有 self
这是一个闭包,你当前的代码是一个计算的 属性 其中 returns 每个引用都有一个开关,这会导致约束崩溃,因为添加到视图的开关与您为
设置约束的对象不是同一个对象
lazy var switchOnOff: UISwitch = {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}()
然后在 viewDidLoad
中调用 setupLayouts
,顺便说一句,扩展与这个问题完全无关
我正在尝试以编程方式创建 UISwitch,但出于某种原因,我无法使用任何约束。如果我不使用任何约束,则会在左上角创建 UISwitch。
我尝试通过在声明我的开关时添加约束来创建 UISwitch,这确实将开关移到了不同的地方。然而,这是一个问题,因为我希望它在我看来受到其他项目的约束。
class cameraController: UIViewController {
var switchOnOff: UISwitch {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}
}
extension cameraController{
@objc func switchButton(_ sender:UISwitch){
if (sender.isOn == true){
print("UISwitch state is now ON")
}
else{
print("UISwitch state is now Off")
}
}
}
extension cameraController {
private func setupLayouts() {
view.addSubview(switchOnOff)
switchOnOff.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20).isActive = true
switchOnOff.topAnchor.constraint(equalTo: photosButtonIcon.bottomAnchor, constant: 20).isActive = true
}
}
我希望能够将开关的约束添加到我的 setupLayouts 扩展中,而不是在声明开关时。
当 运行 上面的代码是我得到的错误是:
Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
我在 setupLayouts 扩展的约束的第一行收到此错误。
任何帮助都会很棒。
你需要一个懒惰的 var 在这个块中有 self
这是一个闭包,你当前的代码是一个计算的 属性 其中 returns 每个引用都有一个开关,这会导致约束崩溃,因为添加到视图的开关与您为
lazy var switchOnOff: UISwitch = {
let switchOnOff = UISwitch()
switchOnOff.isOn = false
switchOnOff.translatesAutoresizingMaskIntoConstraints = false
switchOnOff.addTarget(self, action: #selector(switchButton(_:)), for: .valueChanged)
return switchOnOff
}()
然后在 viewDidLoad
中调用 setupLayouts
,顺便说一句,扩展与这个问题完全无关