如何解决SwiftUI:滑块在导航栏项目的前/后时的怪异行为
我无法将Slider作为视图放置在导航栏的尾部。由于它已挂接到某个状态,因此更改它的状态非常容易,而且一点也不平滑。
这是我的示例代码:
struct ContentView: View {
@State var opacityValue: Double = 1
var body: some View {
NavigationView {
GeometryReader { geometry in
VStack {
Slider(value: self.$opacityValue,in: 0...100,step: 5) { changed in
}
Image(systemName: "photo.fill")
.foregroundColor(.blue)
.padding()
.opacity(opacityValue / 100)
}.navigationBarItems(trailing: HStack(spacing: 20) {
Slider(value: self.$opacityValue,step: 5) { _ in
}.frame(width: 100)
}).frame(width: geometry.size.width / 2)
}
}
}
}
我在常规VStack中使用的滑块可以非常平滑地更改不透明度(甚至可以移动导航栏中的滑块。)但是,另一方面,移动导航栏中的滑块是非常不便的/跳跃。
有没有办法使这项工作成功?
解决方法
您可以使用@Binding
属性为Image创建新的View模型,并通过它传递不透明度,当@State
属性更改且View具有要刷新
struct ContentView: View {
@State var opacityValue: Double = 1
var body: some View {
NavigationView {
GeometryReader { geometry in
VStack {
Slider(value: self.$opacityValue,in: 0...100,step: 5) { _ in
}
ImageOpacityView(opacity: $opacityValue)
}.navigationBarItems(trailing: HStack(spacing: 20) {
Slider(value: self.$opacityValue,step: 5) { _ in
}.frame(width: 100)
}).frame(width: geometry.size.width / 2)
}
}
}
struct ImageOpacityView: View {
@Binding var opacity: Double
var body: some View {
Image(systemName: "photo.fill")
.foregroundColor(.blue)
.padding()
.opacity(opacity / 100)
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。