标签: swiftui-navigationlink

SwiftUI:NavigationLink 在最少 10 行示例中导致不必要的填充

当将视图包装在 a 中NavigationLink以创建主从流时,NavigationLink似乎添加了我不想要的填充(红色)。

在此输入图像描述 在此输入图像描述

如果我注释掉NavigationLink,一切看起来都是正确的(右图)。然而,这当然使我的观点无法点击。

我该如何去除在手表上渲染此内容时出现的红色填充?

这是我运行的代码:

struct ContentView: View {
    
    let testArray = [1,2,3,4,5]
    
    var body: some View {
        
        ScrollView {
            VStack {
                ForEach(testArray, id: \.self) { element in
                    
                    NavigationLink(destination: Text("")) {
                        Text("BB . . . . . . . . . . . . . . . . . . . . . . .")
                            .font(.title3)
                            .foregroundColor(.white)
                            .background(Color.blue)
                    }.background(Color.red) //has all the unwanted padding
                    
                }
            }.background(Color.black)
        }.background(Color.gray)
    }
}
Run Code Online (Sandbox Code Playgroud)

我在如何在 SwiftUI 中将 NavigationLink …

padding swiftui swiftui-navigationlink

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

如何使用 NavigationLink 进行列表视图滑动操作

我想知道如何将 NavigationLink 放入下面代码中的 swipeActions 部分。代码本身的编译没有任何问题,但是当我点击“编辑”链接时没有任何反应。我的目的是通过点击“编辑”来显示另一个视图。谢谢

var body: some View {
    List {
        ForEach(processes, id: \.id) { process in
            NavigationLink(process.name!, destination: MeasurementsView(procID: process.id!, procName: process.name!))
                .swipeActions() {
                    Button("Delete") {
                        deleteProcess = true
                    }.tint(.red)
                    NavigationLink("Edit", destination: ProcessView(procID: process.id!, procName: process.name!)).tint(.blue)
                }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

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

SwiftUI:如何使用 iOS16/iPadOS16 NavigationSplitView 和 NavigationLink 更新远程孩子的详细信息列

我正在尝试更新旧的应用程序以使用新的 NavigationSplitView 和 NavigationLink,但当侧边栏具有子对象层次结构并且我想从远处更新详细视图时,我试图以正确的方式进行操作子对象。例如,基于 WWDC2022 示例项目 Navigation Cookbook,我尝试了以下操作,但没有成功:

测试应用程序.swift

@main

struct TestApp: App {
  @StateObject var appState = AppState()

  var body: some Scene {
    WindowGroup {

      NavigationSplitView {
         ProjectListView()
      } detail: {
        if let chapter = appState.chapter {
          ChapterDetailView(chapter: chapter)
        } else {
          Text("Pick a Chapter")
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ChapterListView.swift < ProjectListView() 的远亲(向下 3 级)兄弟

List(selection: $appState.chapter) {
  ForEach(chapters) { chapter in
    NavigationLink(chapter.title ?? "A Chapter", value: chapter)
  }
}
Run Code Online (Sandbox Code Playgroud)

appState.swift

class AppState: ObservableObject {
  @Published var chapter: …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink ios16 swiftui-navigationsplitview ipados16

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

NavigationSplitView 内的 SwiftUI NavigationStack 无法在 iPhone 和 iPad 上运行

我正在尝试使用NavigationStack内部NavigationSplitView

struct ContentView: View {
    @State var mainMenu: MenuItem?
    @State var subMenu: SubMenuItem?
    
    var body: some View {
        NavigationSplitView {
            List(MenuItem.allCases, selection: $mainMenu) { item in
                NavigationLink(value: item) {
                    Text(item.rawValue)
                }
            }
        } detail: {
            NavigationStack {
                List(SubMenuItem.allCases, selection: $subMenu) { item in
                    NavigationLink(value: item) {
                        Text(item.rawValue)
                    }
                }
                .navigationDestination(for: SubMenuItem.self) { selected in
                    DetailView(item: selected)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
    let item: SubMenuItem
    
    var body: some View {
        Text(item.id)
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack

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

SwiftUI 中新的 NavigationStack 过渡,如何从默认幻灯片更改为自定义或显示?

我有 NavigationStack 及其自己的导航链接,用于 iOS16 开发。

如何更改要显示的默认幻灯片过渡或自定义过渡?

另外,您是否在 NavigationStack 或 NavigationLink 上应用转换?

这是我的代码:

import SwiftUI

struct TestView: View {
    var body: some View {
        NavigationStack() {
            NavigationLink ("Link", value: "Any Value")
                .navigationDestination(for: String.self) { textValue in
                    destinationView(textValue: textValue)
                }
        }
    }
}

struct destinationView: View {
    let textValue: String
    var body: some View {
            Text(textValue)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何更改默认转换?

swiftui swiftui-navigationlink swiftui-animation swiftui-navigationsplitview swiftui-navigationstack

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

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

我正在尝试在 SwiftUI 中重新创建许多社交媒体应用程序中看到的帐户关注者流程。

\n
    \n
  1. 您按下个人资料上的按钮即可查看您的关注者列表
  2. \n
  3. 您可以点击您的任何一位关注者来查看他们的帐户
  4. \n
  5. 您可以按他们个人资料上的按钮来查看他们的关注者列表
  6. \n
  7. 您可以点击他们的任何一位关注者来查看他们的帐户
  8. \n
\n

步骤 3 和 4 可以永远继续下去(下面是另一个例子):

\n
MyProfile -> Followers (my followers list) -> FollowerView -> Followers (their followers list) -> FollowerView -> Followers (their followers list) -> FollowerView and so on...\n
Run Code Online (Sandbox Code Playgroud)\n

然而,通过运行下面的实现,XCode 控制台会打印:

\n
\n

\xe2\x80\x9cmyApp.SomeProfile\xe2\x80\x9d 的 navigationDestination 已在堆栈的较早位置声明。仅使用最接近堆栈根视图声明的目标。

\n
\n

我知道为什么会这样,但不确定如何解决这个问题。我也认为用作值的类型是否NavigationLink合适,因为它是Int。将其替换为更自定义的类型会更好吗?

\n

任何帮助将不胜感激。

\n
// Enum with custom options\nenum ViewOptions: Hashable {\n    case followers(Int)\n    \n    @ViewBuilder func view(_ path: Binding<NavigationPath>, …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationlink swiftui-navigationstack

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

ObervableObject 被多次初始化,并且没有刷新我的视图

我有这样的结构

contentView {
    navigationView{
     foreach {
        NavigationLink(ViewA(id: id))
     }
    }
}
Run Code Online (Sandbox Code Playgroud)

///其中视图A包含一个请求触发器在视图中出现

struct ViewA: View {

    @State var filterString: String = ""

    var id: String!
    @ObservedObject var model: ListObj = ListObj()

    init(id: String) {
        self.id = id
    }

    var body: some View {
        VStack {
            SearchBarView(searchText: $filterString)
            List {
                ForEach(model.items.filter({ filterString.isEmpty || $0.id.contains(filterString) || $0.name.contains(filterString)  }), id: \.id) { item in
                    NavigationLink(destination: ViewB(id: item.id)) {
                        VStack {
                            Text("\(item.name) ")
                        }
                    }
                }
            }

        }
        .onAppear {
            self.model.getListObj(id: self.id) //api request, …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui swiftui-navigationlink

3
推荐指数
2
解决办法
1603
查看次数

没有 NavigationLink 的 SwiftUI 列表披露指示器

我正在寻找一种解决方案来显示披露指示器 V 形,而无需将我的视图包装到NavigationLink. 例如,我想显示指示器但不想导航到新视图,而是显示一个模态。

我找到了很多隐藏指示器按钮的解决方案,但没有一个解决方案解释了如何添加一个。在当前的 SwiftUI 版本中这甚至可能吗?

struct MyList: View {
    var body: some View {
        NavigationView {
        List {
            Section {
                Text("Item 1")
                Text("Item 2")
                Text("Item 3")
                Text("Item 4")

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,我想将披露指示符添加到Item 1而无需将其包装成NavigationLink

我已经尝试使用chevron.rightSF 符号来伪造指标,但该符号与默认的 iOS 符号不 100% 匹配。顶部是默认底部是chevron.right

披露按钮图像

swift swiftui swiftui-list swiftui-navigationlink

3
推荐指数
4
解决办法
2585
查看次数

在 SwiftUI 中使用 List 时,如何使用 NavigationLink isActive 绑定?

用例非常简单。我有一个地点列表,每个地点对应一个地理围栏。我需要在用户位于其地理围栏内的特定行中启用导航。该列表是动态的,是从 API 中获取的。Stackoverflow 上也有类似的问题,但这些问题仅针对静态列表。

我尝试使用布尔字典,但我无法使其工作。

这是一个简化的模拟代码:

struct ListView: View {
  @State private var navActive: [UUID: Bool] = [:]
  var body: some View {
    
           List (viewModel.allItems, id: \.id) { item in
           NavigationLink(destination: DetailView(item), isActive: $navActive[item.id]) {
             Text(item.name)
             .onTapGesture {
                if currentLocation.isInside(item.geofence) { navActive[item.id] = true }
             }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:无法 在 NavigationLink isActive 参数上将类型 'Binding<Bool?>' 的值转换为预期的参数类型 'Binding<Bool>'

注意:在接收带有 onRecieve 修饰符的 allItems 时,我已经用键值对填充了 navActive 字典

ios swift swiftui swiftui-list swiftui-navigationlink

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

SwiftUI 的 NavigationView 缺少 Apple Watch 上的后退按钮

我使用 SwiftIU 创建了一个 Apple Watch 应用。应用程序的主视图是一个列表,带有到另一个列表的 NavigationLink。当我在内部列表之一中时,后退按钮不在视图的顶部。但是当我从屏幕一侧滑动时(比如在 iOS 上),我会回到主视图。

有没有办法将后退按钮添加回屏幕顶部?新手势是 watchOS 7 的新“后退按钮”吗?

Xcode 12.2(测试版 3)。Apple Watch S6(模拟器,7.1)和 Apple Watch S5(真实,7.0)。SwiftIU 2.0

主要观点:

NavigationView {
    List {
        ForEach(listsModel.lists) { (list) in
            NavigationLink(destination: ListView(list: list)
                            .environmentObject(list.rowsModel)) {
                ListsRowView(list: list)
            }
        }
    }
}
.onAppear {
    listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
Run Code Online (Sandbox Code Playgroud)

内部观点:

List(rowsModel.rows) { (row) in
    RowView(row: row, shouldUpdate: $shouldUpdate)
}
.navigationBarHidden(false)
.onAppear {
    instantiateTimer()
    rowsModel.update()
}
.onDisappear {
    cancelTimer()
}
.onReceive(timer) { _ in
    if shouldUpdate {
        rowsModel.update()
    }
}
.navigationTitle(list.name)
Run Code Online (Sandbox Code Playgroud)

更新:在 Canvas …

watchos swiftui swiftui-navigationlink

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