在 SwiftUI 中,每当导航栏被隐藏时,滑动返回手势也会被禁用。
有什么办法可以在保留 SwiftUI 中的向后滑动手势的同时隐藏导航栏?我已经有一个自定义的“返回”按钮,但仍然需要手势。
我已经看到了一些 UIKit 的解决方案,但仍然不知道如何在 SwiftUI 中做到这一点
这是您自己尝试的代码:
import SwiftUI
struct RootView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Go to second view")
            }
        }
    }
}
struct SecondView: View {
    var body: some View{
        Text("As you can see, swipe to go back will not work")
        .navigationBarTitle("")
        .navigationBarHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议或解决方案
当 ForEach 循环的元素出现或消失时,有什么方法可以添加动画?
我曾尝试以多种方式使用 withAnimation{} 和 .animation() 但它们似乎不起作用
这是一些代码(Xcode 11 beta 5):
import SwiftUI
struct test: View {
    @State var ContentArray = ["A","B","C"]
    var body: some View {
        ScrollView{
        VStack{
            ForEach(ContentArray.indices, id: \.self){index in
                ZStack{
                // Object
                    Text(self.ContentArray[index])
                    .frame(width:100,height:100)
                    .background(Color.gray)
                    .cornerRadius(20)
                    .padding()
                //Delete button
                    Button(action: {
                      self.ContentArray.remove(at: index)
                    }){
                    Text("?")
                    .foregroundColor(.white)
                    .frame(width:40,height:40)
                    .background(Color.red)
                    .cornerRadius(100)
                   }.offset(x:40,y:-40)
             }
           }
         }   
       }
   }
}
#if DEBUG
struct test_Previews: PreviewProvider {
    static var previews: some View {
        test()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)
如下所示,没有动画,一切都感觉非常突然。任何解决方案都非常感谢
重要提示:当元素数量发生变化时,布局应该以与 …
我有一个应用程序
- 单独提取数组的每个元素(通过索引)
 - 然后将其绑定到可以使用该单个元素的结构(查看和编辑)
 
但是每次数组减小大小时,都会导致索引超出范围错误,这不是直接因为我的代码
据我所知,这是因为:在循环使用更改后的数组刷新后,它之前创建的视图并未完全删除,并且仍在尝试访问超出范围的部分。但这就是我自己能弄清楚的全部
这是我的示例代码:
import SwiftUI
struct test: View {
    @State var TextArray = ["A","B","C"]
    var body:some View {
        VStack{
        ForEach(TextArray.indices, id: \.self){index in
            //Text View
            TextView(text: self.$TextArray[index])
            .padding()
            }
            //Array modifying button
            Button(action: {
                self.TextArray = ["A","B"]
            }){
                Text(" Shrink array ")
                .padding()
            }
        }
    }
}
struct TextView:View {
    @Binding var text:String
    var body:some View {
    Text(text)
    }
}
#if DEBUG
struct test_Previews: PreviewProvider {
    static var previews: some View {
        test()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来满足上述两个要求而不会导致此问题或有任何方法可以规避此问题?任何回应都非常感谢。
在 SwiftUI 中,有没有办法像大多数 iOS 应用程序一样通过点击选项卡栏来弹出到根视图?
这是预期行为的示例。
我尝试使用simultaneousGesture以下方式以编程方式弹出视图:
import SwiftUI
struct TabbedView: View {
    @State var selection = 0
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
                TabView(selection: $selection) {
            RootView()
                .tabItem {
                    Image(systemName: "house")
                    .simultaneousGesture(TapGesture().onEnded{
                        self.presentationMode.wrappedValue.dismiss()
                        print("View popped")
                    })
            }.tag(0)
                
            Text("")
                .tabItem {
                    Image(systemName: "line.horizontal.3")
            }.tag(1)
        }
    }
}
struct RootView: View {
    var body: some View{
        NavigationView{
            NavigationLink(destination:SecondView()){
        Text("Go to second view")
            }
        }
    }
}
struct SecondView: View {
    var body: some View{
        Text("Tapping the …Run Code Online (Sandbox Code Playgroud) 我试图实现一个视图,如果内容数组的大小发生变化,该视图可以更改显示项的数量(由ForEach循环创建),就像购物应用程序在用户拉动刷新后如何更改其可用项数一样
这是到目前为止我尝试过的一些代码。如果我没记错的话,这些可以使用Xcode beta 4,但是可以使用beta 5:
码:
import SwiftUI
struct test : View {
    @State var array:[String] = []
    @State var label = "not pressed"
    var body: some View {
        VStack{
            Text(label).onTapGesture {
                self.array.append("ForEach refreshed")
                self.label = "pressed"
            }
            ForEach(0..<array.count){number in
                Text(self.array[number])
            }
        }
}
}
#if DEBUG
struct test_Previews: PreviewProvider {
    static var previews: some View {
        test()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)
我通常是SwiftUI和GUI编程的新手,只是感觉每个内容都是在启动时定义的,因此之后真的很难进行更改(例如:在用户导航离开并返回视图后重置视图)。对于循环问题的解决方案或使视图更具动态性的任何提示将不胜感激!
因此,我有一个XCode项目,该项目具有2个.swift文件,这些文件通过SwiftUI的@Binding共享一个变量。
该项目可以很好地构建并通过模拟器运行。
但是,每当我尝试在辅助文件(从主文件接收变量)上使用“预览”时,在成功构建并显示“ MyProject.app崩溃:与应用程序的通信中断”后,崩溃。
我仍然可以通过以下方式测试项目:
但是,由于它在我的应用程序中需要执行多个操作才能到达辅助文件的视图,并且每次Xcode刷新时,应用程序才会重新启动,因此这确实耗费了构建和测试的时间。
这是我的声音文件代码:
import SwiftUI
struct Menu_Screen : View {
    @Binding var TapToBegin:Bool
    var body: some View {
        Button(action: {
        }) {
            Text("A Button").color(.white).frame(width: TapToBegin ? 50:0, height: TapToBegin ? 100:0).background(Color.blue).cornerRadius(10)
        }
    } }
#if DEBUG 
    struct Menu_Screen_Previews : PreviewProvider {
    @State static var BoolVariable = true
    static var previews: some View {
        Menu_Screen(TapToBegin: $BoolVariable)
    } }
#endif
Run Code Online (Sandbox Code Playgroud)
我想将预览与辅助文件一起使用,以便始终查看其视图并节省时间。任何帮助将不胜感激。