标签: swiftui-navigationview

SwiftUI NavigationView 删除空白

我有一个HomeView

NavigationView {
    ZStack {
        VStack {
             NavigationLink(destination: ProfileView()) {
                 if session.userInSession?.activated != 1 {
                     completionText(message: "Complete Your Profile")
                 } else {
                     completionText(message: "Edit Your Profile")
                 }
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ProfileView没有包含在导航视图中,也没有栏标题:

VStack {
    ScrollView(showsIndicators: false) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的ProfileView也可以从我的访问SettingView

NavigationView {
    VStack(alignment: .leading) {
        List {
            NavigationLink(destination: ProfileView()) {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我ProfileView从设置屏幕访问我的时,它显示正常。但是当我从我的访问它时,HomeView它会在顶部创建空白:

在此输入图像描述

当我通过“设置”时,效果很好:

在此输入图像描述

如何删除上面的空白?

swift swiftui swiftui-navigationlink swiftui-navigationview

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

如果未显示所有 NavigationLink,SwiftUI 中 NavigationView 中的 NavigationLink `tag` 和 `selection` 将停止工作

Form我在 a中有一个项目列表NavigationView,每个项目都有一个可以通过 访问的详细视图NavigationLink。当我向列表添加新元素时,我想显示其详细视图。为此,我使用 a@State var currentSelection接收NavigationLinkselection,每个元素的功能如下tag

NavigationLink(
  destination: DetailView(entry: entry),
  tag: entry,
  selection: $currentSelection,
  label: { Text("The number \(entry)") })
Run Code Online (Sandbox Code Playgroud)

这是有效的,并且遵循Apple 文档最佳实践

令人惊讶的是,当列表中的元素多于屏幕上显示的元素(再加上~2)时,它就会停止工作。问:为什么?我该如何解决这个问题?


我做了一个最小的例子来复制这种行为:

import SwiftUI

struct ContentView: View {
    @State var entries = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
    @State var currentSelection: Int? = nil

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

ios swiftui swiftui-navigationlink swiftui-navigationview

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

按下后退按钮时 SwiftUI 工具栏项目被剪裁

我在 SwiftUI 中遇到了一种奇怪的行为,我似乎无法解决它。

鉴于以下简单的示例应用程序,我遇到了这种行为:工具栏项目在初始运行时正确呈现,但导航离开并返回它会被剪切。

在此输入图像描述

重新创建此示例代码:

内容视图.swift

import SwiftUI

struct ContentView: View {
    var body: some View {
      NavigationView {
        
        NavigationLink(destination: View2()) {
          Text("Hello, world!")
            .padding()
            .navigationTitle("View 1")
            .toolbar {
              Circle()
                .fill(Color.red)
                .frame(width: 150, height: 150, alignment: .center)
            }
        }
      }
    }
}

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

View2.swift

import SwiftUI

struct View2: View {
    var body: some View {
        Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
    }
}

struct View2_Previews: PreviewProvider {
    static var previews: some View …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationlink swiftui-navigationview

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

SwiftUI 在 NavigationLink 视图中隐藏 TabView 栏

我有一个 TabView 和每个 Tab 项的单独 NavigationView 堆栈。它运行良好,但是当我打开任何 NavigationLink 时,仍会显示 TabView 栏。我希望它在我点击任何 NavigationLink 时消失。

struct MainView: View {
    @State private var tabSelection = 0

    var body: some View {
        TabView(selection: $tabSelection) {
            FirstView()
                .tabItem {
                    Text("1")
                }
                .tag(0)
            SecondView()
                .tabItem {
                    Text("2")
                }
                .tag(1)
        }
    }
}

struct FirstView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: FirstChildView()) { // How can I open FirstViewChild with the TabView bar hidden?
                Text("Go to...")
            }
            .navigationBarTitle("FirstTitle", displayMode: .inline)
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-tabview swiftui-navigationview

7
推荐指数
4
解决办法
3821
查看次数

SwiftUI 2.0 中的 navigationBarTitle 和 navigationTitle 修饰符有什么区别?

学习了所有新的 SwiftUI 2.0 更改,但发现.navigationTitle它的工作方式几乎与.navigationBarTitle. 我查看了 WWDC 2020 视频,发现了一个视频,其中提到它用于区分 MacOS 中的选项卡标题?但不确定我现在是否应该使用它而不是.navigationBarTitle在 iOS 中使用它?此外,Apple 文档也不清楚两者之间的区别。

所以我的问题是,确切的区别是什么,你将如何在 iOS/MacOS 中使用它们?

swiftui swiftui-navigationview

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

SwiftUI macOS 工具栏图标对齐三列布局

在这个问题之后,如何在 swiftUI 生命周期中为三列视图添加工具栏分隔符 ,我有一个稍微不同的问题。我正在尝试实现相同的目标,但第二列和第三列包含在一个视图中,该视图又添加到第一列(即侧边栏)旁边的导航视图内。

代码示例

import SwiftUI

@main
struct ThreeColumnsAppApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .frame(minWidth: 900, maxWidth: .infinity, minHeight: 600, maxHeight: .infinity)
        }
        .windowStyle(DefaultWindowStyle())
        .windowToolbarStyle(UnifiedWindowToolbarStyle(showsTitle: true))
    }
}

struct ContentView: View {
    var body: some View {
        
        NavigationView {
            Sidebar()
                .toolbar { Button(action: {}, label: { Image(systemName: "sidebar.left") }) }
            MainContentView()
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

struct Sidebar: View {
    
    var body: some View {
        List {
            Text("Menu 1")
            Text("Menu 2") …
Run Code Online (Sandbox Code Playgroud)

macos toolbar swiftui swiftui-navigationview

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

带有自定义标题的 swiftui 列表

我想在 swiftui 中为列表设置图像标题。我想要的效果如下图所示:

在此输入图像描述

但是,我无法删除该图像行中的填充。我的代码如下:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                Section() {
                    Image("HeadImage")
                        .resizable()
                        .frame(height: 150)
                }
                ForEach((0..<4), id: \.self) { index in
                    Section {
                        NavigationLink(destination: Text("aaa")) {
                            Label("Buttons", systemImage: "capsule")
                        }
                        NavigationLink(destination: Text("aaa")) {
                            Label("Colors", systemImage: "paintpalette")
                        }
                        NavigationLink(destination: Text("aaa")) {
                            Label("Controls", systemImage: "slider.horizontal.3")
                        }
                    }
                }
            }
            .navigationBarTitle("SwiftUI")
            .navigationBarTitleDisplayMode(.inline)
        }
        .accentColor(.accentColor)
    }
}
Run Code Online (Sandbox Code Playgroud)

但图像行有一个填充,如下所示:

在此输入图像描述

有什么方法可以去除这个填充吗?

swiftui swiftui-list swiftui-navigationview

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

在 SwiftUI 中,如何避免在从子视图更新共享状态数据时重绘父视图以避免导航问题?

自 Xcode 12.5 以来,我看到很多“无法呈现。请提交错误”。console 登录 Xcode 控制台,我记得在 12.5 之前没有看到过。

当我NavigationLink从父视图导航到子视图,并且子视图中的逻辑更新父视图所依赖的状态之一时,会显示此消息。

下面是一个示例伪代码,其中消息列表显示在父视图中,消息详细信息显示在列表的子视图中,最后是独立设置子视图。

struct MessageListView: View {
    ...
    @StateObject var messageList = MessageList()

    var body: some View {
        debugPrint("!!MessageListView has been redrawn!!")
        return VStack {
            NavigationLink(destination:SettingsView()){
                Text("Go to settings")
            }
            ForEach(messageList.data.sorted(by: {$0.key < $1.key}), id:\.key) { k, m in
                NavigationLink(destination:MessageView(message:...){
                    Text(m.text)
                }
            }
        }
    }
}

struct MessageView: View {
    ...
    @ObservedObject var messageList : MessageList
    @ObservedObject var message : Message
    ...
    var body: some View {
        Text(...)
        .onAppear { …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui swiftui-navigationlink swiftui-navigationview

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

SwiftUI 工具栏被键盘附件视图覆盖

您好,我在 Xcode 12.4 (iOS 14) 中使用 SwiftUI 需要解决一个棘手的问题:假设我有Form许多部分和TextEditors,此表单具有.toolbar带有一些内容(本例中为按钮)的修饰符(底部栏)。所有的一切都被包裹在里面NavigationView。一旦用户单击其中之一TextEditor,底部工具栏就会被键盘的系统附件视图覆盖。请注意,我根本不修改安全区域。任何人都知道下面的代码有什么问题吗?

struct ContentView: View {
    @State var narrative: String = ""

    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Test 1")) {
                    Text("Bla Bla Bla")
                }
                Section(header: Text("Test 2")) {
                    Text("Bla Bla Bla")
                }
                Section(header: Text("Test 3")) {
                    Text("Bla Bla Bla")
                }
                Section(header: Text("Test 4")) {
                    Text("Bla Bla Bla")
                }
                Section(header: Text("Test 5")) {
                    Text("Bla Bla Bla")
                }
                Section(header: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-form swiftui-navigationview

6
推荐指数
0
解决办法
451
查看次数

如果我将内容添加到视图底部,SwiftUI 导航栏上的模糊效果将停止工作

我有一个非常简单的视图,带有导航栏和 VStack 中的列表。如果我在列表上向上滚动,列表内容将显示在导航栏后面,默认情况下具有漂亮的模糊效果。这种行为是正确的。

正确的模糊效果

我还希望在列表下方有一些不滚动的固定文本。但是,如果我在列表下方添加以下单行代码Text("bottom"),导航栏上的模糊效果将不再起作用。

模糊效果消失了

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            VStack {
                List {
                    Text("Hello, world!")
                        .foregroundColor(.red)
                        .font(.system(size: 70))
                }
                .listStyle(.plain)
                .border(.red)

                Text("bottom")  // remove this and the blur works
            }
            .background(.black)
            .navigationBarTitle("test", displayMode: .inline)
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何在保留模糊效果的同时获取列表下方的内容?

blur swift swiftui swiftui-navigationview

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