我有一个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它会在顶部创建空白:
当我通过“设置”时,效果很好:
如何删除上面的空白?
Form我在 a中有一个项目列表NavigationView,每个项目都有一个可以通过 访问的详细视图NavigationLink。当我向列表添加新元素时,我想显示其详细视图。为此,我使用 a@State var currentSelection接收NavigationLink为selection,每个元素的功能如下tag:
NavigationLink(
destination: DetailView(entry: entry),
tag: entry,
selection: $currentSelection,
label: { Text("The number \(entry)") })
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当列表中的元素多于屏幕上显示的元素(再加上~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) 我在 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
我有一个 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) 学习了所有新的 SwiftUI 2.0 更改,但发现.navigationTitle它的工作方式几乎与.navigationBarTitle. 我查看了 WWDC 2020 视频,发现了一个视频,其中提到它用于区分 MacOS 中的选项卡标题?但不确定我现在是否应该使用它而不是.navigationBarTitle在 iOS 中使用它?此外,Apple 文档也不清楚两者之间的区别。
所以我的问题是,确切的区别是什么,你将如何在 iOS/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) 我想在 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)
但图像行有一个填充,如下所示:
有什么方法可以去除这个填充吗?
自 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
您好,我在 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) 我有一个非常简单的视图,带有导航栏和 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)
为什么会发生这种情况?如何在保留模糊效果的同时获取列表下方的内容?
swiftui ×10
swift ×6
ios ×4
blur ×1
macos ×1
swiftui-form ×1
swiftui-list ×1
toolbar ×1
xcode ×1