自 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 上运行时,我得到的结果如下图所示:
我已经通读了文档,但无法弄清楚为什么会突然发生这种行为。
任何帮助将不胜感激。
谢谢
鉴于这个简单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:-(
我是否遗漏了一些非常明显的东西,或者功能还不存在?
自从安装 Xcode 14 以来,我现在在控制台中打印以下错误消息:
呈现值的 NavigationLink 必须出现在基于 NavigationContent 的 NavigationView 内。链接将被禁用。
我的应用程序的结构如下:
我将视图 A 包裹在导航视图中。导航视图内部有一个链接到视图 B 的导航链接。
我的视图 B 没有导航视图,但有一个指向视图 C 的导航链接。视图 B 继承了视图 A 中定义的导航视图
当我按下视图 B 上的后退按钮,弹出回视图 A 时,会打印警告。当我将视图 B 包装在导航视图中时,警告消失,但这当然现在在两个导航视图中显示视图 B,这不是什么我想。
我不确定为什么会打印此警告,因为视图 B 继承了视图 A 中定义的 NavigationView。
swiftui swiftui-navigationlink swiftui-navigationview ios16 xcode14
我正在尝试为我的 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
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 …
我目前正在开发一个使用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) 当我从向下推 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) 是否可以使用 Searchable 在搜索模式下不隐藏导航栏中的标题?当搜索字段获得焦点时,使用导航栏中标题下方的代码将被隐藏。
NavigationView {
}
.searchable(text: $viewModel.searchText,
placement: .navigationBarDrawer(displayMode: .always),
prompt: Strings.selectCity)
}
Run Code Online (Sandbox Code Playgroud)
我想实现这样的目标:

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 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
swiftui ×10
swift ×2
swiftui-list ×2
ios ×1
ios14 ×1
ios16 ×1
macos ×1
navigation ×1
xcode14 ×1