提问人:Roy0Anonymous 提问时间:11/7/2023 更新时间:11/7/2023 访问量:59
为什么导航标题和选取器视图正在滚动,而不在滚动视图中?
Why is the Navigation Title and Picker View is scrolling without it being inside a Scroll View?
问:
对不起,这个奇怪的标题,我不知道如何正确解释它。
我遇到了一个问题,即导航标题和选取器视图随内容一起滚动,即使它不在滚动视图中。
我正在添加一个视频以获得更好的上下文。
我无法找出解决方案,当我切换选取器视图并切换回来时,它得到了修复。
import SwiftUI
struct BitcoinView: View {
@State var isBitcoin: Bool = true
var body: some View {
NavigationStack {
VStack {
Picker("Bitcoin or Lightning", selection: $isBitcoin) {
Text("Bitcoin").tag(true)
Text("Lightning").tag(false)
}
.pickerStyle(.segmented)
.navigationTitle(isBitcoin ? "Bitcoin" : "Lightning")
Spacer()
if isBitcoin {
bitcoin
} else {
lightning
}
}
.padding()
}
}
var bitcoin: some View {
VStack() {
ScrollView {
Text("0")
.frame(width: 50)
.font(.title)
.padding(.top, 200)
}
.refreshable {
print("hello")
}
Spacer()
HStack {
Button(action: {
}, label: {
ZStack {
Rectangle()
.stroke(Color.blue)
.frame(width: 80, height: 80)
Image(systemName: "arrow.up")
}
})
.padding(.trailing, 30)
Button(action: {
}, label: {
ZStack {
Rectangle()
.stroke(Color.blue)
.frame(width: 80, height: 80)
Image(systemName: "arrow.down")
}
})
.padding(.leading, 30)
}
}
}
var lightning: some View {
VStack {
ScrollView {
Text("0")
.font(.title)
.frame(width: 50)
.padding(.top, 200)
}
.refreshable {
print("Hello")
}
Spacer()
HStack {
Button(action: {
}, label: {
ZStack {
Rectangle()
.stroke(Color.blue)
.frame(width: 80, height: 80)
Image(systemName: "arrow.up")
}
})
Button(action: {
}, label: {
ZStack {
Rectangle()
.stroke(Color.blue)
.frame(width: 80, height: 80)
Image(systemName: "arrow.down")
}
})
.padding(.horizontal, 30)
Button(action: {
}, label: {
ZStack {
Rectangle()
.stroke(Color.blue)
.frame(width: 80, height: 80)
Image(systemName: "gear")
}
})
}
}
}
}
#Preview {
BitcoinView()
}
答:
1赞
valosip
11/7/2023
#1
如果它在更改选择器值后按预期工作,您可以将 isBitcoin 设置为 false 作为默认值。然后添加一个 .onAppear { isBitcoin =.true } 作为黑客解决方法。但我敢肯定我以前见过这种行为,导航标题喜欢坚持下面的内容。
struct BitcoinView: View {
@State var isBitcoin: Bool = false
var body: some View {
NavigationStack {
VStack {
Picker("Bitcoin or Lightning", selection: $isBitcoin) {
Text("Bitcoin").tag(true)
Text("Lightning").tag(false)
}
.pickerStyle(.segmented)
.navigationTitle(isBitcoin ? "Bitcoin" : "Lightning")
Spacer()
if isBitcoin {
bitcoin
} else {
lightning
}
}
.padding()
}
.onAppear {
isBitcoin = true
}
}
}
或者,您只需创建自己的标题标签即可避免这种情况。只是取决于你到底在追求什么。
struct BitcoinView: View {
@State var isBitcoin: Bool = true
var body: some View {
NavigationStack {
VStack {
Text(isBitcoin ? "Bitcoin" : "Lightning")
.frame(maxWidth: .infinity, alignment: .leading)
.font(.largeTitle)
.fontWeight(.bold)
Picker("Bitcoin or Lightning", selection: $isBitcoin) {
Text("Bitcoin").tag(true)
Text("Lightning").tag(false)
}
.pickerStyle(.segmented)
Spacer()
if isBitcoin {
bitcoin
} else {
lightning
}
}
.padding()
}
}
}
评论
0赞
Roy0Anonymous
11/7/2023
谢谢,onAppear 方法对我有用。但我仍然不确定为什么会发生这种情况。我对这种行为感到非常困惑,特别是因为它在切换选择器后得到了修复。有什么解释吗?
评论