标签: swiftui-navigationview

SwiftUI iOS14 - NavigationView + List - 不会填充空间

自 iOS 14 更新以来,我遇到了 NavigationView 中的 List 问题。

这是代码的简单细分 - 我已经将所有未显示问题的内容都进行了条带化

struct ContentView: View {
    
    var views = ["Line 1", "Line 2", "Line 3"]
    
    var body: some View {
        
        NavigationView {
            
            VStack {
                
                List {
                    
                    ForEach(views, id: \.self) { view in
                       
                        VStack {
                        Text("\(view)")
                        }
                        .background(Color.red)
                        
                    }
                    
                }
                
            }
            
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果:

导航视图中的列表

我无法弄清楚为什么列表会像那样悬停在导航视图的中心。据我所知,这应该会生成一个占据所有可用空间的列表视图(导航栏所在的顶部除外)。

事实上,当在 iOS 13.5 上运行时,我得到的结果如下图所示:

在导航视图 2 中列出

我已经通读了文档,但无法弄清楚为什么会突然发生这种行为。

任何帮助将不胜感激。

谢谢

swift swiftui swiftui-list ios14 swiftui-navigationview

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

如何禁用 NavigationView 推送和弹出动画

鉴于这个简单NavigationView

struct ContentView : View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("Push Me", destination: Text("PUSHED VIEW"))
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

NavigationView当目标视图被推入/弹出堆栈时,有没有人找到禁用动画的方法?

从 iOS2.0 开始,这在 UIKit 中已经成为可能!我认为从框架中提出的要求并不过分。我在所有视图上尝试了各种修饰符(即NavigationView容器、目标视图NavigationLink、 等)

这些是我尝试过的一些修饰符:

.animation(nil)
Run Code Online (Sandbox Code Playgroud)
.transition(.identity)
Run Code Online (Sandbox Code Playgroud)
.transaction { t in t.disablesAnimations = true }
Run Code Online (Sandbox Code Playgroud)
.transaction { t in t.animation = nil }
Run Code Online (Sandbox Code Playgroud)

没有任何区别。我没有发现任何有用的东西EnvironmentValues:-(

我是否遗漏了一些非常明显的东西,或者功能还不存在?

swiftui swiftui-navigationlink swiftui-navigationview

20
推荐指数
3
解决办法
4263
查看次数

如何修复 Xcode 14 警告:呈现值的 NavigationLink 必须出现在基于 NavigationContent 的 NavigationView 内。链接将被禁用

自从安装 Xcode 14 以来,我现在在控制台中打印以下错误消息:

呈现值的 NavigationLink 必须出现在基于 NavigationContent 的 NavigationView 内。链接将被禁用。

我的应用程序的结构如下:

  1. 我将视图 A 包裹在导航视图中。导航视图内部有一个链接到视图 B 的导航链接。

  2. 我的视图 B 没有导航视图,但有一个指向视图 C 的导航链接。视图 B 继承了视图 A 中定义的导航视图

当我按下视图 B 上的后退按钮,弹出回视图 A 时,会打印警告。当我将视图 B 包装在导航视图中时,警告消失,但这当然现在在两个导航视图中显示视图 B,这不是什么我想。

我不确定为什么会打印此警告,因为视图 ​​B 继承了视图 A 中定义的 NavigationView。

swiftui swiftui-navigationlink swiftui-navigationview ios16 xcode14

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

单个视图的 macOS SwiftUI 导航

我正在尝试为我的 macOS SwiftUI 状态栏应用程序创建一个设置视图。到目前为止,我的实现一直使用NavigationView, 和NavigationLink,但是当设置视图将父视图推到一边时,这个解决方案会产生一个半视图。下面的屏幕截图和代码示例。

导航边栏

在此处输入图片说明

struct ContentView: View {
    var body: some View {
        VStack{
            NavigationView{
            NavigationLink(destination: SecondView()){
                Text("Go to next view")
                }}
        }.frame(width: 800, height: 600, alignment: .center)}
}

struct SecondView: View {
    var body: some View {
        VStack{

                Text("This is the second view")

        }.frame(width: 800, height: 600, alignment: .center)
    }
}
Run Code Online (Sandbox Code Playgroud)

我能找到的少量信息表明,在 macOS 上使用 SwiftUI 是不可避免的,因为NavigationViewiOS ( StackNavigationViewStyle)上的“全屏”在 macOS 上不可用。

在 SwiftUI for macOS 中,是否有一种简单甚至复杂的方法来实现到设置视图的转换,该视图占据整个框架?如果没有,是否可以使用AppKit用来调用用 SwiftUI 编写的 View …

navigation macos swiftui macos-catalina swiftui-navigationview

16
推荐指数
2
解决办法
4281
查看次数

SwiftUI .toolbar disappears after following NavigationLink and coming back

I've added a .toolbar to the top level of a NavigationView that will eventually be used to select items in a list without using swipe gestures (up button, down button, etc.). I also have a .navigationBar going on, to access other views for Account and Settings.

For the most part it's looking really good, but when I follow a NavigationLink (in .navigationBarItems) within NavigationView, and then use the built-in back navigation, my .toolbar disappears from the top level.

Am …

swiftui swiftui-navigationlink swiftui-navigationview

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

SwiftUI 中全局 NavigationPath 的放置位置

我目前正在开发一个使用NavigationStack. 我想知道我应该把NavigationPath变量放在哪里,这样我就可以在任何地方修改它。

我尝试将它作为变量放入根视图中State,但我似乎很难在深度嵌套的视图中修改它。

struct RootView: View {
    @State var path = NavigationPath()
    
    var body: some View {
        NavigationStack(path: $path) {
            // ...
        }
    }
}

struct SubView: View {
    var body: some View {
        Button("Push to root") {
            // how should I access `path` from here?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试将其作为全局变量,但这可能会导致导航在所有场景之间共享,这不是我的意图。

class Router: ObservableObject {
    static var shared = Router()
    @Published var path = NavigationPath()
}

struct RootView: View {
    @ObservedObject var router = Router.shared …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationview

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

在推送视图中修改列表绑定属性时,SwiftUI 导航会弹出

当我从向下推 2+ 层的视图中的数组更新绑定属性时,导航会在属性更改后立即弹出。

Xcode 13.3 测试版、iOS 15。

我创建了一个简单的演示,代码如下。

购物清单 列表编辑 列表部分编辑
购物清单视图 购物清单编辑视图 购物清单编辑部分查看

更新列表标题(一个视图深)就可以了,导航堆栈保持不变,如果我返回,更改就会发布。但是,当调整部分标题(两层深)时,只要我对属性进行一次更改,导航就会弹出。

我有一种感觉,我在这里缺少基本的基础知识,而且我有一种感觉,它一定与列表有关id?但我正在努力弄清楚或解决它。

动图

例子

代码:

楷模:

struct ShoppingList {
    let id: String = UUID().uuidString
    var title: String
    var sections: [ShoppingListSection]
}

struct ShoppingListSection {
    let id: String = UUID().uuidString
    var title: String
}

Run Code Online (Sandbox Code Playgroud)

查看型号:

final class ShoppingListsViewModel: ObservableObject {
    @Published var shoppingLists: [ShoppingList] = [
        .init(
            title: "Shopping List 01",
            sections: [
                .init(title: "Fresh food")
            ]
        )
    ]
}
Run Code Online (Sandbox Code Playgroud)

内容查看:

struct ContentView: View {
    var body: some View …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-navigationview

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

使用 Searchable 在搜索过程中保留导航栏标题

是否可以使用 Searchable 在搜索模式下不隐藏导航栏中的标题?当搜索字段获得焦点时,使用导航栏中标题下方的代码将被隐藏。

 NavigationView {
        }
        .searchable(text: $viewModel.searchText,
                    placement: .navigationBarDrawer(displayMode: .always),
                    prompt: Strings.selectCity)
    }
Run Code Online (Sandbox Code Playgroud)

我想实现这样的目标:

像这样

swiftui swiftui-navigationview

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

可搜索修饰符不在导航栏标题下方显示搜索栏

searchable我正在使用 iOS 15 并在 SwiftUI 中的列表上尝试新的修饰符。看起来,当您附加searchable(text: $searchText)到 NavigationView 时,搜索栏默认呈现在屏幕上的导航栏标题下方。当我尝试使用它并运行模拟器时,搜索栏不会呈现在屏幕上。仅当我开始在屏幕上向下滚动列表时,搜索栏才会出现在屏幕上。

这是预期的行为吗?

这是代码。

@State private var searchText = ""
let data = (1...50).map( {_ in Int.random(in: 1...10)} )

var body: some View {
    NavigationView {
        List {
            ForEach(data, id: \.self) { d in
                Text("\(d)")
            }
        }
    }.searchable(text: $searchText)
}
Run Code Online (Sandbox Code Playgroud)

滚动之前

在此输入图像描述

滚动后

在此输入图像描述

swiftui swiftui-list swiftui-foreach swiftui-navigationview

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

TabView 中的 SwiftUI 导航标题

由于本问题SwiftUI TabView 亮度视图垂直位置中概述的答案中概述的原因,我的应用程序的菜单结构是NavigationView-> TabView-> 具有不同导航标题的子视图。

问题是为.navigationTitle整个 TabView 提供一个导航标题,而不是为每个子视图提供一个导航标题。如何拥有多个导航标题TabView,每个子视图一个?

struct ContentView: View {
    var body: some View {
        NavigationView {
            TabView {
                Text("Hello")
                    .navigationTitle("Title One")
                    .tabItem {
                        Image(systemName: "square.stack")
                }
                Text("Hello Again")
                    .navigationTitle("Title Two")
                    .tabItem {
                        Image(systemName: "checkmark.square")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink swiftui-tabview swiftui-navigationview

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