标签: swiftui-navigationview

iOS 15 中的导航 + Tabview + Sheet 损坏

看起来 Navigation + TabView + Sheet 在 iOS 15 中被破坏了。

当我这样做时:ContentView -> DetailView -> Bottom Sheet

当底部工作表出现时,Detail视图会自动从堆栈中弹出: https://www.youtube.com/watch? v=gguLptAx0l4

我希望Detail即使底部工作表出现,视图也会保留在那里。有谁知道为什么会发生这种情况以及如何解决它?

这是我的示例代码:

import Combine
import SwiftUI
import RealmSwift

struct ContentView: View {

    var body: some View {
        NavigationView {
            TabView {
                TabItemView(num: 1)
                    .tabItem {
                        Text("One")
                    }
                TabItemView(num: 2)
                    .tabItem {
                        Text("Two")
                    }
            }
        }
    }
}

struct TabItemView: View {

    private let num: Int

    init(num: Int) {
        self.num = num
    }

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

swiftui swiftui-tabview swiftui-navigationview ios15

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

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
查看次数

SwiftUI - NavigationView 标题和后退按钮在方向更改后裁剪在状态栏下

每当我将设备旋转到横向并再次返回时,顶部 NavigationView(包括标题和后退按钮)都会被夹在状态栏下方。

编辑:最小可重现示例:

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                VStack {
                    ForEach(0..<15) { _ in
                        Text("Filler")
                        .frame(maxWidth: .infinity)
                        .background(Color.green)
                        .padding()
                    }
                }
            }
            .navigationBarTitle("Data")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只要内容是可滚动的,就会发生故障。我最初是在使用List. 如果我先单击一行,转到弹出视图,然后旋转设备,或者只是在主屏幕中旋转回来,都没有关系。

struct ContView: View {
    let data = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen"]
    var body: some View {
        NavigationView {
            List {
                ForEach(data, id: \.self) { word in
                    NavigationLink(destination:
                        Text("Link")
                    ) …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui swiftui-navigationview

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

在 SwiftUI 中的导航栏标题下方添加附件视图

I\xe2\x80\x99m 尝试添加嵌入导航栏中的附件视图标题下方导航栏中的附件视图,该视图可以在默认的 iOS 日历应用程序中看到(\xe2\x80\x9cs mtwtfs\xe2\x80\x9d 行)或GitHub 移动应用程序:

\n

生长激素1生长激素1

\n

我\xe2\x80\x99d 喜欢它与 GH mobile 等大型标题样式导航栏一起使用。

\n

LazyVStack\xe2\x80\x99spinnedView带有节标题几乎可以工作,但我可以 \xe2\x80\x99t 获取背景颜色以使其与导航栏无缝连接,即使使用ultraThinMaterial. 它还在固定视图和栏之间留下了分隔线。

\n

有没有办法实现这种布局?\n欢迎使用 SwiftUI、SwiftUI+ Introspect和 UIKit 中的解决方案!

\n

uinavigationbar ios swift swiftui swiftui-navigationview

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

为什么 iOS 16 中弹出时导航标题显示方式会从大变为内联?

当我从具有内联显示模式的推送视图中弹出时,最初较大的父视图的显示模式更改为内联,并且用户必须向下滚动标题才能恢复到其原始模式。

问:如何确保设置视图上始终显示大标题?

我使用的是 Xcode 14 beta 6,在预览中它不会发生,但在运行 iOS 16 的模拟器上它会发生。

设置视图

struct SettingsView: View {
    @State private var isPresentingChangePasswordView = false
    
    var body: some View {
        Form {
            Section {
                NavigationLink(destination: EmptyView()) {
                    Label("Account Details", systemImage: "person")
                }
                NavigationLink {
                    Form {
                        Button("Change Password") {
                            isPresentingChangePasswordView = true
                        }
                    }
                    .navigationTitle("Password & Security")
                    .navigationBarTitleDisplayMode(.inline)
                } label: {
                    Label("Password & Security", systemImage: "lock")
                }
                NavigationLink(destination: EmptyView()) {
                    Label("Manage Subscription", systemImage: "crown")
                }
                Button {
                    
                } label: {
                    HStack {
                        Label …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-navigationview ios16 swiftui-navigationstack

9
推荐指数
0
解决办法
1140
查看次数

如何从 SwiftUI 推送到现有的 UINavigationController 堆栈?

我们正在推动SwiftUI嵌入在土地中的视图,UIHostingViewController如下UIKit所示:

首先制作UIViewController

    func hostingController() -> UIViewController {
    let swiftUIView = swiftUIView(viewModel: viewModel(data: [Data, Data, Data]))
    return UIHostingController(rootView: swiftUIView)
}
Run Code Online (Sandbox Code Playgroud)

然后将其压入UINavigationView堆栈:

[self.navigationController pushViewController:hostingViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

这让我们进入了SwiftUI环境。但是,如果我们的SwiftUI环境有自己的带有NavigationView和的导航堆栈NavigationLink,则原始navigationBar的后退按钮只能导航回原始呈现UIViewController

有没有办法将SwiftUI嵌入的视图推NavigationView送到现有UINavigationController堆栈上?

到目前为止,我们唯一的想法是UIHostingViewController为每个新SwiftUI屏幕创建一个新屏幕,并通过某种委托方法将其推送到堆栈上。

我们正在寻找的是这样的:

UINavigationStack: [UIViewController -> UIViewController -> SwiftUIView -> SwiftUIView]
Run Code Online (Sandbox Code Playgroud)

中的后退<箭头navigationBar将按预期运行。

如果我们可以进一步澄清,请告诉我们!

uinavigationcontroller swift swiftui swiftui-navigationlink swiftui-navigationview

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

从 SwiftUI 中的导航堆栈中删除屏幕

我用来NavigationLinkNavigationView. 如何从导航堆栈中删除屏幕?不仅隐藏导航“后退”按钮,还从堆栈中完全删除屏幕?

例如,我有这样的屏幕链:A -> B -> C 如何删除屏幕B以返回CA

或者,另一个例子,如何删除 screenAB,这样Cscreen 将成为根?

或者说这一切在 SwiftUI 的构想中都是不可能实现的?

swiftui swiftui-navigationlink swiftui-navigationview

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

SwiftUI 预览的子视图嵌入到 NavigationView 中时不可选择

当我将视图的主体嵌入到 a 中时,NavigationView我失去了在预览窗口中选择子视图的所有能力,以及选择代码以触发和显示预览中关联子视图周围的蓝色边框的反向能力。NavigationView无论我点击什么或点击哪里,它都只会在整个周围显示蓝色边框。这是一个错误吗?如果不是,我做错了什么?

编辑:根据下面评论的要求,这是一个简单的例子:

struct FooView: View {

    var body: some View {
        NavigationView {
            VStack {
                Label("Try")
                Label("Selecting")
                Label("These")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationview

8
推荐指数
0
解决办法
652
查看次数

如果未显示所有 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
查看次数