标签: navigationlink

NavigationLink 只工作一次

我正在开发一个登录应用程序,登录后列出了类别。在每个类别下都有一些水平列出的项目。事情是登录后,主页面出现,一切都列出来了。当您单击一个项目时,它会进入详细屏幕,但是当您尝试返回时,它只会崩溃。我发现了这个流程为什么我的 SwiftUI 应用程序在“NavigationView”中的“navigationBarItems”内放置“NavigationLink”后向后导航时会崩溃?但我无法解决我的问题。由于我的项目变得复杂,我只想在swiftui中练习导航并创建了一个新项目。顺便说一下,我下载了最新的 xcode 版本 11.3。我写了一个简单的代码如下:

NavigationView{
        NavigationLink(destination: Test()) {
            Text("Show Detail View")
        }
    .navigationBarTitle("title1")
Run Code Online (Sandbox Code Playgroud)

而 Test() 视图如下:

import SwiftUI

struct Test: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这非常简单。我也在互联网上尝试过类似的例子,但它并没有像它想象的那样工作。当我运行该项目时,我单击导航链接并导航到 Test() 视图。然后我点击后退按钮,它导航到主页。但是,当我第二次单击导航链接时,没有任何反应。导航链接只工作一次,之后什么也没有发生。它不导航,也不抛出任何错误。我是 swiftui 的新手,除了导航之外,一切都很棒。我在互联网上尝试了很多示例和建议的解决方案,但似乎没有任何解决方案可以解决我的问题。

navigation xcode ios swiftui navigationlink

100
推荐指数
2
解决办法
1万
查看次数

SwifUI onAppear 被调用两次

Q1:为什么 onAppears 会被调用两次?

Q2:或者,我可以在哪里拨打网络电话?

我在代码中的几个不同位置放置了 onAppears,它们都被调用了两次。最终,我试图在显示下一个视图之前进行网络调用,所以如果您知道不使用 onAppear 的方法,我会全力以赴。

我还尝试在我的列表中放置和删除 ForEach,但它没有改变任何东西。

Xcode 12 Beta 3 -> Target iOs 14 CoreData 已启用但尚未使用

struct ChannelListView: View {

@EnvironmentObject var channelStore: ChannelStore
@State private var searchText = ""
@ObservedObject private var networking = Networking()

var body: some View {
    NavigationView {
        VStack {
            SearchBar(text: $searchText)
                .padding(.top, 20)
             
            List() {

                ForEach(channelStore.allChannels) { channel in
                    
                    NavigationLink(destination: VideoListView(channel: channel)
                                    .onAppear(perform: {
                        print("PREVIOUS VIEW ON APPEAR")
                    })) {
                        ChannelRowView(channel: channel)
                    }
                }
                .listStyle(GroupedListStyle())
            }
            .navigationTitle("Channels")
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

networking list swiftui navigationlink onappear

22
推荐指数
6
解决办法
4114
查看次数

运行时错误:前提条件失败:属性未能设置初始值

我有一个BugSplitView单独工作正常但会导致

先决条件失败:属性未能设置初始值

在预览或模拟器中导航到时出错。

该视图具有由水平按钮栏分隔的上部 (Color) 和下部 (Color),并使用 GeometeryReader 和split状态进行布局。当它是 NavigationButton 的目的地时,它不会在预览中正确显示并在模拟器中运行时报告上面的断言。删除它BugButtonBar,它的工作原理。把我难住了!帮助。

import SwiftUI

struct BugSplitView: View {
    @State var split : CGFloat = 0.75
    var buttons : [BugButtonBar.Info]{
        [BugButtonBar.Info(title: "title", imageName: "text.insert"){}]
    }
    var body: some View {
        GeometryReader{ g in
            VStack(spacing: 0){
                Color.gray
                    .frame(width: g.size.width, height: (g.size.height) * self.split)
                VStack{
                    BugButtonBar(infos: self.buttons)
                    Color(white: 0.3)
                }
                    .frame(height: (g.size.height) * (1 - self.split))
            }
        }.edgesIgnoringSafeArea(.all)
    }
}


struct BugButtonBar : View{

    struct Info : Identifiable …
Run Code Online (Sandbox Code Playgroud)

swiftui navigationlink

12
推荐指数
1
解决办法
6628
查看次数

支持遗留项目中的 SwiftUI 导航

我想知道是否有任何方法可以在遗留项目中开始使用SwiftUI并且仍然能够在SwiftUI场景中来回导航。也就是说,让我们想象一下,我只想为去年我一直在从事的项目支持最新的iOS 13。一切都建立在UIKit之上,导航以通常的方式呈现或推送视图控制器。

现在我想开始使用 SwiftUI,所以我在我的项目的 General 中启用了该选项,目标iOS 13,在Info.plist 中获取我的SceneDelegate和我的新键值对。为了导航到Swift UI场景,我可以推送一个UIHostingViewController,其 rootView 将是我新设计的SwiftUI视图。但是如何使用NavigationLink推送旧的UIKit视图控制器?

class ViewController: UIViewController {

    @IBAction func userDidTapGo(_ sender: Any) {
        let contentView = ContentView()
        navigationController?.pushViewController(UIHostingController(rootView: contentView), animated: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "UIKit"
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: /* what should …
Run Code Online (Sandbox Code Playgroud)

ios ios13 swiftui navigationlink

9
推荐指数
1
解决办法
2155
查看次数

使用 NavigationLink 将信息传递到另一个视图

我有以下视图,我需要将item内容传递到另一个视图(DetailsEvent.swift),我正在使用NavigationLink. (我使用的是 Xcode 11 GM)

struct Events: View {

    @ObservedObject var networkManager = NetworkManager()

    var body: some View {

        NavigationView{

            List(self.networkManager.eventos.events){ item in

                NavigationLink(destination: DetailsEvent(item: item))  {

                    VStack(alignment: .leading) {

                      HStack {

                        Image(systemName: "calendar")
                        .foregroundColor(.gray)

                        Text(item.start_date)
                            .font(.subheadline)
                            .foregroundColor(.gray)
                      }

                    Text(item.title)
                        .font(.headline)                    
                }
              }

           }
            .navigationBarTitle("Events")
        }
    }
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误:

传递给不带参数的调用的参数

不传递任何变量:NavigationLink (destination: DetailsEvent ()一切正常。

详情Event.swift

struct DetailsEvent: View {
    var body: some View {
        Text("here details content")
    }
}
Run Code Online (Sandbox Code Playgroud)

错误

swiftui navigationlink swiftui-list

8
推荐指数
1
解决办法
1万
查看次数

有没有办法给 NavigationLink 添加额外的功能?用户界面

我想为 NavigationLink 添加一个额外的功能。

示例代码是这样的:

struct ContentView: View {

func yes () {
print("yes")
}

var body: some View {

NavigationView {
NavigationLink(destination: level1()) {

     Text("Next")      
}}}}
Run Code Online (Sandbox Code Playgroud)

我知道这行不通,但是有可能做这样的事情吗?(它会去目的地并同时调用该函数)

NavigationLink(destination: level1(), yes()) {Text("Next")}   
Run Code Online (Sandbox Code Playgroud)

我尝试在 NavigationLink 中放置一个按钮,但它也不起作用。当我这样做时,只有按钮中的功能起作用,而 NavigationLink 不起作用。

NavigationLink(destination: level1())   {
        Button(action: { self.yes() }) 
        { Text("Button")}
        }
Run Code Online (Sandbox Code Playgroud)

navigation function swiftui navigationlink

7
推荐指数
1
解决办法
2869
查看次数

SwiftUI - 正确使用导航视图和工作表

导航视图和工作表存在问题。我有以下流程: - ContentView:具有打开 ContentView2 工作表的按钮 - ContentView2:具有导航链接,其标题可转到 ContentView3 - ContentView3:具有导航链接,无标题,可将用户引导至 ContentView2

但是,当我设置上述流程时,当用户在 ContentView2 和 ContentView3 之间来回切换时,我最终会得到堆叠的标头。当用户在两个视图之间来回切换时,我该如何防止这种情况并且只有 1 个标头?谢谢!

struct ContentView: View {
    @State var showSheet = false

    var body: some View {
        Button("Click"){
            self.showSheet.toggle()
        }
        .sheet(isPresented: $showSheet) {
            ContentView2()
        }
    }
}


struct ContentView2: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: ContentView3()){
                Text("Click Here")
            }
            .navigationBarTitle("Bar Title", displayMode: .inline)
        }
    }
}

struct ContentView3: View {
    var body: some View {
        NavigationLink(destination: ContentView2()){
            Text("Click Here")
        }
    } …
Run Code Online (Sandbox Code Playgroud)

navigationbar swiftui navigationlink

7
推荐指数
1
解决办法
7049
查看次数

如何处理 UIViewControllerRepresentable 包装器内的 NavigationLink?

所以我正在尝试创建一个自定义分页滚动视图。我已经能够创建该包装器,并且该包装器中的内容由一个自定义视图组成。在那个自定义视图中,我有两个 NavigationLink 按钮,按下后应该会将用户带到两个不同的视图。

那些 NavigationLink 按钮不起作用。

scrollViewWrapper是NavigationView内。我创建了一个测试按钮,它只是一个简单的 Button 并且似乎有效。因此,我在使用 NavigationLink 和 custom 时没有正确执行某些操作UIViewControllerRepresentable

这是我使用自定义包装器的地方。

NavigationView {
            UIScrollViewWrapper {
                HStack(spacing: 0) {
                    ForEach(self.onboardingDataArray, id: \.id) { item in
                          OnboardingView(onboardingData: item)
                                .frame(width: geometry.size.width, height: geometry.size.height)
                       }
                    }
            }.frame(width: geometry.size.width, height: geometry.size.height)
             .background(Color.blue)
           }
Run Code Online (Sandbox Code Playgroud)

入职视图:

struct OnboardingView: View {
var onboardingData: OnboardingModel

var body: some View {
    GeometryReader { geometry in
        VStack(spacing: 10) {
            Spacer()
            Image("\(self.onboardingData.image)")
                .resizable()
                .frame(width: 300, height: 300)
                .aspectRatio(contentMode: ContentMode.fit)
                .clipShape(Circle())
                .padding(20)

            Text("\(self.onboardingData.titleText)")
                .frame(width: geometry.size.width, height: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui navigationlink

6
推荐指数
1
解决办法
2069
查看次数

SwiftUI NavigationLink 自动弹出,这是出乎意料的

我在带有拆分视图(横向)的 iPad 上的 NavigationLink 遇到了一些问题。下面是一个例子:

屏幕录制

这是重现问题的代码:

import SwiftUI

final class MyEnvironmentObject: ObservableObject {
    @Published var isOn: Bool = false
}

struct ContentView: View {
    @EnvironmentObject var object: MyEnvironmentObject

    var body: some View {
        NavigationView {
            NavigationLink("Go to FirstDestinationView", destination: FirstDestinationView(isOn: $object.isOn))
        }
    }
}

struct FirstDestinationView: View {
    @Binding var isOn: Bool

    var body: some View {
        NavigationLink("Go to SecondDestinationView", destination: SecondDestinationView(isOn: $isOn))
    }
}

struct SecondDestinationView: View {
    @Binding var isOn: Bool

    var body: some View {
        Toggle(isOn: $isOn) …
Run Code Online (Sandbox Code Playgroud)

ios swiftui navigationlink swiftui-navigationlink

6
推荐指数
2
解决办法
1888
查看次数

SwiftUi - 隐藏“后退”按钮和导航栏(出现几分之一秒)

我使用此代码来隐藏导航栏和后退按钮,但是当加载视图时,我仍然可以看到后退按钮一小会儿,然后它就消失了。有什么办法可以阻止它被显示吗?

var body: some View {
    NavigationView {
        NavigationLink(destination: DeferView { WeekView(journey: self.launcher.completeJourney!) }, isActive: self.$launcher.readyJourney ) { EmptyView () }
        .navigationBarHidden(true)
        .navigationBarTitle("")
    }
}
Run Code Online (Sandbox Code Playgroud)

先感谢您,

navigationbar swiftui navigationlink swiftui-navigationlink

5
推荐指数
1
解决办法
3638
查看次数