标签: swiftui-navigationlink

Swiftui iOS 16 中的 NavigationStack 和 TabView:错误或使用不当?

[Xcode 14.1,iOS 16.1] 我有一个带有 navigationTitle 的 NavigationStack 和一个带有 2 个视图的 TabView。每个View都有一个ScrollView(见下图):

NavigationStack 和 TabView 问题图片

当我点击 Tab1(上图中红色的#1),然后向上滑动时,行为符合预期(#2),即大的 navigationTitle 移动到中心,而我的视图经过下方并变得模糊。完美的。然而,当我点击 Tab2 (#3) 然后向上滑动 (#4) 时,大标题仍然很大,并且视图不会变得模糊。然后我再次点击 Tab1 (#5),它按预期工作。

请帮忙!

这是我的代码:

内容查看:

import SwiftUI

struct ContentView: View {
   
   @State private var selection: Tab = .tab1
   enum Tab {
      case tab1
      case tab2
   }
   @State private var mainTitle = "Tab1"
   
    var body: some View {
        
       NavigationStack {
          
          TabView(selection: $selection) {
             
             Tab1(mainTitle: $mainTitle)
                 .tabItem {
                     Label("Tab1", systemImage: "wrench.adjustable.fill")
                 }
                 .tag(Tab.tab1)
             
             Tab2(mainTitle: $mainTitle)
                 .tabItem {
                     Label("Tab2", …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-tabview

3
推荐指数
1
解决办法
1941
查看次数

SwiftUI:NavigationBarItem 未显示

有了这段代码,为什么 navigationBarItem 没有显示出来?该视图在工作表中被调用,但这在之前并不重要......

struct ChangePasswordView: View {
    @Environment(\.presentationMode) private var presentationMode

    @State private var passwordNew = ""
    @State private var passwordNewAgain = ""

    var body: some View {
        ScrollView {
            changePassword
        }
        .navigationBarItems(leading: backButton)
        .navigationBarItems(trailing: finishButton)
    }

    var backButton: some View {
        Button(action: { self.presentationMode.wrappedValue.dismiss() }) {
            Text("Cancel")
        }
    }

    var finishButton: some View {
        Button(action: {
            self.changePasswordGlobally()
            self.presentationMode.wrappedValue.dismiss()
        }) {
            Text("Apply")
        }
        .disabled(self.passwordNew.isEmpty || self.passwordNew != self.passwordNewAgain)
        .disableAutocorrection(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在以下屏幕截图中看到的那样,应该引导的 navigationBarItem 没有显示:

有问题的截图!

swift swiftui swiftui-navigationlink

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

在swiftui中2秒后推送视图

如何在没有任何交互的情况下在 swiftUI 中 x 秒后推送视图?

 NavigationView{
            .onAppear {
                DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
                    NavigationLink(destination: pageViewUi()) {
                        EmptyView()
                    }
                }
            }
}
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-navigationlink

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

SwiftUI - NavigationLink 的目的地创建具有额外空间的视图

我已将登录页面缩减为一个导航链接,该导航链接将列表视图作为其目的地。如下图所示,问题在于,我得到的标题不是左侧间隔良好的标题,而是右侧所示的巨大空间。两种视图都是相同的,但右侧的视图是页面设计时的预览。左图是登录屏幕后的页面预览。

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            NavigationLink(destination: CustomerView()) {
                Text("login")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是列表视图的代码:

var body: some View {
        
        NavigationView {
            VStack {
                SearchBarView(text: $searchText)
                    .padding(.top, 0)
                List {
                    ForEach(customers.filter({searchText.isEmpty ? true : $0.name.localizedCaseInsensitiveContains(searchText)})) { customer in
                        NavigationLink(destination: CustomerDetailView(customer: customer)) {
                            CustomerRow(customer: customer)
                        }
                        .navigationBarTitle("Customers")
                    }
                }
            }
        }
        .navigationBarBackButtonHidden(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

listview swiftui swiftui-navigationlink

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

SwitUI - 列表中的两个导航链接

我的列表单元格中有两个 NavigationLink

我想在点击一次时转到目的地 1,在点击两次时转到目的地 2。所以我添加了两个点击手势来控制导航。

但是当我点击时,有两个问题:

  • 1 不会调用点击手势块。
  • 2 即使两个导航链接位于 TextView 后面,它们也会自动激活。真正的效果是:点击单元格 -> 前往 Destination1 -> 返回首页 -> 前往 Destination2 -> 返回首页

这是我的代码:

struct MultiNavLink: View {
    @State var mb_isActive1 = false;
    @State var mb_isActive2 = false;
    
    var body: some View {
        return
            NavigationView {
                List {
                    ZStack {
                        NavigationLink("", destination: Text("Destination1"), isActive: $mb_isActive1)
                        NavigationLink("", destination: Text("Destination2"), isActive: $mb_isActive2)
                        Text("Single tap::go to destination1\nDouble tap,go to destination2")
                    }
                    .onTapGesture(count: 2, perform: {()->Void in
                        NSLog("Double tap::to destination2")
                        self.mb_isActive2 = true
                    }).onTapGesture(count: 1, …
Run Code Online (Sandbox Code Playgroud)

list ios swiftui vstack swiftui-navigationlink

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

调整 Watch 部分中 NavigationLink 的填充/边距

我的原始部分只有一个 Text 对象。当我将其替换为 NavigationLink 以便点击它会导致另一个视图时,该部分的大小突然增大,同时添加了填充和边距。我已经尝试过 .padding(0) 和我能想到的所有其他方法,但 NavigationLink 坚持是一个超大的气泡。

var body: some View {
    List {
        Section(header:
                    NavigationLink("Section Title", destination: OrgChooserView())) {
            ForEach(model.metrics, id: \.displaySequence) { metric in
                MetricRowView(metric: metric)
            }
        }
    }
    .navigationTitle("Test").accentColor(.orange)
}
Run Code Online (Sandbox Code Playgroud)

在部分中使用导航链接:

在此输入图像描述

章节中包含文本:

在此输入图像描述

如果您能在删除节标题周围的可见气泡或调整其填充和边距方面获得任何帮助,我将不胜感激。

谢谢。

watchkit swiftui swiftui-navigationlink

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

SwiftUI 中的 NavigationLink 不再工作

我\xc2\xb4m 创建一个应用程序并NavigationLink在 Swift/SwiftUI 中使用,但它不再工作了。我现在不知道从什么时候开始,但两三周前,一切都工作正常。它NavigationLinks已经在代码中存在了更长的时间,工作正常。但今天我用了新的,但它们不起作用。它会在模拟器和真实设备上查看它们是否被禁用或其他情况。它们是灰色的,您无法单击它们,或者即使单击它们,也不会发生任何情况。有什么解决办法吗?

\n
import SwiftUI\n\nstruct MedikamenteView: View {\n    var body: some View {\n        Form {\n            NavigationLink(\n                destination: ASSView(),\n                label: {\n                    Text("ASS")\n                })\n            NavigationLink(\n                destination: AdrenalinView(),\n                label: {\n                    Text("Adrenalin")\n                })\n        }\n    }\n}\n\nstruct MedikamenteView_Previews: PreviewProvider {\n    static var previews: some View {\n        MedikamenteView()\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

例如,这个工作正常:

\n
import SwiftUI\n\nstruct RechtView: View {\n    var body: some View {\n        Form {\n           NavigationLink(\n            destination: ParagraphenView(),\n            label: {\n                Text("Paragraphen")\n            })\n            NavigationLink(\n                destination: AufklaerungEinwilligungView(),\n                label: {\n                    Text("Die Aufkl\xc3\xa4rung mit nachfolgender Einwilligung")\n …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationlink

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

如何在 LazyVGrid 中以编程方式触发 NavigationLink

我有一个LazyVGrid里面的NavigationView

NavigationView {
    ScrollView {
        LazyVGrid(columns: columns) {
            ForEach(items) { item in
                NavigationLink(tag: item, selection: $displayedItem) {
                    DetailView(item)
                } label: {
                    GridItemView(item)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

引用的变量在视图上定义如下:

@State var displayedItem: Item?
let columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
Run Code Online (Sandbox Code Playgroud)

现在我想显示特定项目的详细视图。我通过简单地将此项分配给displayedItem属性来做到这一点:

func showDetailView(for item: Item) {
    displayedItem = item
}
Run Code Online (Sandbox Code Playgroud)

LazyVGrid当我调用此函数时相应项目可见时,这非常有效。但是,当该项目不可见时,我首先需要滚动到该项目才能NavigationLink触发。我知道为什么会发生这种情况(因为项目是延迟加载的,毕竟它是一个惰性LazyVGrid网格),但我不知道如何在需要时加载特定项目。


我尝试过的:

我还尝试通过将整个内容包装ScrollView在 a 内ScrollViewReader并附加以下修饰符以编程方式滚动到目标项目:

.onChange(of: displayedItem) { item in
    if let item = …
Run Code Online (Sandbox Code Playgroud)

lazy-loading swiftui swiftui-navigationlink lazyvgrid

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

SwiftUI NavigationStack NavigationLink 相同值,多个目的地

我有一个这样的模型...

struct User: Codable {
    let followersCount: Int
    let followingCount: Int
}
Run Code Online (Sandbox Code Playgroud)

使用 NavigationStack 我希望能够使用基于 Value 的 NavigationLink

 NavigationLink(value: user.followersCount) {
    Text("Followers")
}

NavigationLink(value: user.followingCount) {
    Text("Following")
}
.navigationDestination(for: Int.self) { _ in
    FollowersView()
}

.navigationDestination(for: Int.self) { _ in
    FollowingView()
}
Run Code Online (Sandbox Code Playgroud)

因为这两个值都是 Int。有没有办法区分两者?

swiftui swiftui-navigationlink ios16 swiftui-navigationstack

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

如何在按钮单击时以编程方式切换选项卡?在 swiftui

我在我的代码中实现了标签栏。我在第一个选项卡中看到了所有按钮,我想从该按钮以编程方式切换到第二个选项卡。当我使用 navigationView 时,它会创建另一个标签栏并移动到该屏幕,这会更改 swiftui 中的导航索引。

struct AppTabNavigation: View {
    @State var selection: Tab = .dashboard

    var body: some View {
        TabView(selection: $selection) {
            NavigationView {
                FirstTabView()
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            
            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(Tab.home)
            NavigationView {
                SecondView()
            }.navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            
            .tabItem {
                Label("Home", systemImage: "house.fill")
                    .accessibility(label: Text("Home"))
            }
            .tag(second) 
        }
     }
   }
Run Code Online (Sandbox Code Playgroud)

导航代码:

NavigationLink(destination: AppTabNavigation(selection: Tab.home), isActive: self.$isActiveTabbar){
    Text("")
} .isDetailLink(false)
Run Code Online (Sandbox Code Playgroud)

tabbar uitabbar ios swiftui swiftui-navigationlink

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