我正在寻找一种方法来删除SwiftUI中的标签...
我尝试过使用,但似乎并不是正确的方法:
Toggle(isOn: $isBlinky) {
Text("DO NOT DISPLAY").color(.red)
}
.toggleStyle(.switch)
似乎标签被包含在类型本身中(struct Toggle<Label>
),因此可能没有办法只有开关自己...
顺便说一下,如果我使用Text("")
,然后scaledToFit()
,开关仍然有点靠右并且不是真正居中...
总之,如果有人有想法!
PS:在等待解决方案的同时,我包装了一个好用的老式UISwitch
,但那不是我的想法...struct Switch : UIViewRepresentable {
@Binding var isOn : Bool
func makeUIView(context: Context) -> UISwitch {
let uiView = UISwitch()
uiView.addTarget(
context.coordinator,
action: #selector(Coordinator.didChange(sender:)),
for: .valueChanged)
return uiView
}
func updateUIView(_ uiView: UISwitch, context: Context) {
uiView.isOn = isOn
}
// MARK:- Coordinator
func makeCoordinator() -> Switch.Coordinator {
return Coordinator(self)
}
class Coordinator: NSObject {
var control: Switch
init(_ control: Switch) {
self.control = control
}
@objc func didChange(sender: UISwitch) {
control.isOn = sender.isOn
}
}
}
.border(Color.red)
以确保它居中。然后我运行了它并调整了动态类型的环境覆盖,从最低到最高,它始终保持一致。 - Mark Moeykens.labelsHidden()
,视图仍然似乎占用了标签所需的额外空间,而不是只适应实际的切换。如果像我一样有人需要这个空间放置其他内容,我发现.labelsHidden()
修饰符和.frame(.frame(width: 25).offset(x: -15)
的组合效果还不错。 - Will Alexander