我想在UISwitch
内设置UINavigationBar
。但是,当我尝试将手指放在开关上并将其拖动到“开关”时,视图没有响应。
这就是我所拥有的。 https://github.com/rchampa/views-within-navigationItem
答案 0 :(得分:3)
正如上面评论中所述,您的GitHub项目不包含任何数据。然而,如果您以编程方式设置自定义UIBarButtonItem
,一切都按预期工作(对我来说似乎更干净):
override func viewDidLoad() {
super.viewDidLoad()
setupBarButtonItem()
}
private func setupBarButtonItem() {
let offLabel = UILabel()
offLabel.font = UIFont.boldSystemFont(ofSize: UIFont.smallSystemFontSize)
offLabel.text = "OFF"
let onLabel = UILabel()
onLabel.font = UIFont.boldSystemFont(ofSize: UIFont.smallSystemFontSize)
onLabel.text = "ON"
let toggle = UISwitch()
toggle.addTarget(self, action: #selector(toggleValueChanged(_:)), for: .valueChanged)
let stackView = UIStackView(arrangedSubviews: [offLabel, toggle, onLabel])
stackView.spacing = 8
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: stackView)
}
@objc func toggleValueChanged(_ toggle: UISwitch) {
print("new value: \(toggle.isOn)")
}
<强>更新强>
我也通过故事板工作了。与以编程方式设置相比,您必须将UIStackView
嵌入到常规UIView
中才能将其添加为故事板中的UIBarButtonItem
。然后我从UIStackView
到其superview添加了top,leading,bottom和trailing约束(每个约束 0 )。要在设计时删除故事板警告和错误(在运行时它没有任何问题),您必须手动计算并设置包含所有内容所需的外部视图(包含UIStackView
)的宽度子视图(offLabel.width
+ spacing
+ toggle.width
+ spacing
+ onLabel.width
)。