Eth*_*all 4 xcode ios swift swiftui swiftui-tabview
因此,例如,如果我在第一个选项卡的视图中,并且在滚动视图上向下滚动一点,然后转到第二个选项卡,然后返回第一个选项卡,它会完全重新加载视图,但不会显示我已向下滚动页面。
代码:
struct Home: View {
@State var selectedIndex = 0
@State var presented = false
let icons = ["house", "hands.sparkles", "plus", "message", "person"]
var body: some View {
VStack{
Spacer().fullScreenCover(isPresented: $presented, content: {
Text("Create Post Here")
Button(action: {
presented.toggle()
}, label: {
Text("Close")
})
})
switch selectedIndex{
case 0:
HomePage()
case 1:
NavigationView(){
Discover()
}
case 2:
LogoutForNow()
case 3:
LogoutForNow()
case 4:
NavigationView(){
Profile2()
}
default:
HomePage()
}
HStack{
ForEach(0..<5, id: \.self){number in
Spacer()
Button(action: {
if number == 2{
presented.toggle()
}else{
self.selectedIndex = number
}
}, label: {
if number == 2{
Image(systemName: icons[number])
.font(.system(size: 25, weight: .regular, design: .default))
.foregroundColor(.white)
.frame(width: 50, height: 50)
.background(Color.blue)
.cornerRadius(25)
}else{
Image(systemName: icons[number])
.font(.system(size: 25, weight: .regular, design: .default))
.foregroundColor(selectedIndex == number ? .black : Color(UIColor.lightGray))
}
})
Spacer()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
您可以通过几种方法来做到这一点。
方法 1:更改 Z 索引
您可以始终保持两个视图的绘制状态,但在非活动视图之上显示当前活动视图,而不是显示一个视图或另一个视图。您可以使用.zIndex()修饰符来做到这一点。
方法2:使用@SceneStorage(或@AppStorage)
和属性包装器@SceneStorage都@AppStorage支持数据持久性。对于任何一种,您都应该跟踪要保留的值(例如滚动高度或其他值),并将其存储在 SceneStorage/AppStorage 中。
@AppStorage通常用于存储用户首选项或常量,并且是两个选项中最差的一个,但仍然是可能的。理想情况下,您应该@SceneStorage使用的是. 本质上,@SceneStorage允许您在“场景”中存储少量数据,例如用户滚动了多远。但是,当场景被破坏时,例如当用户关闭应用程序时,这些数据也会被破坏。你可以在这里找到更多
另外,如果您想知道如何存储用户在 a 中滚动的距离ScrollView,您应该使用 a ScrollViewReader:)
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |