【发布时间】:2019-06-20 21:10:21
【问题描述】:
我正在尝试以编程方式创建 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 扩展中,而不是在声明开关时。
我在运行上述代码时遇到的错误是:
线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)
我在 setupLayouts 扩展的约束的第一行收到此错误。
任何帮助都会很棒。
【问题讨论】:
-
在您的
switchOnOff属性代码中添加一个打印语句,看看会发生什么。
标签: ios swift nslayoutconstraint uiswitch programmatically