gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:26:33 25 4
gpt4 key购买 nike

关注这个问题,how to add a toolbar divider for a three column view in swiftUI life cycle ,我有一个稍微不同的问题。我试图达到同样的目的,但第二列和第三列包含在一个 View 中,该 View 又被添加到第一列(侧边栏)旁边的 NavigationView 中。
代码示例

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")
Text("Menu 3")
Text("Menu 4")
}
.frame(minWidth: 250)
.listStyle(SidebarListStyle())
}
}

struct MainContentView: View {

var body: some View {

NavigationView {
ListItemView()
DetailView()
}
.navigationTitle("Items List")
.navigationSubtitle("5 items found")
}
}

struct ListItemView: View {

var body: some View {

List {
Text("List item 1")
Text("List item 2")
Text("List item 3")
Text("List item 4")
Text("List item 5")
}
.frame(minWidth: 250)
.listStyle(InsetListStyle())
.toolbar {
Button(action: {}, label: { Image(systemName: "arrow.up.arrow.down.square") })
}
}
}

struct DetailView: View {

var body: some View {
Text("Detail of list 1")
.frame(maxWidth: .infinity, maxHeight: .infinity)
.toolbar {
Button(action: {}, label: { Image(systemName: "plus") })
Button(action: {}, label: { Image(systemName: "minus") })
Button(action: {}, label: { Image(systemName: "pencil") })
}
}
}
输出
正如您在下面看到的,应该在第二列工具栏上的箭头图标与详细 View 的工具栏图标一起被推到右侧。 NavigationView 似乎将 ListItemView 和 DetailView 工具栏视为一个整体。
Toolbar for three columns layout
所需输出
Expected alignment
问题
所以,我的问题是如何使工具栏图标与其 View 对齐?

最佳答案

为了正确执行此操作,您需要一个 ToolbarItem在 View 的三列中的每一列上。例如,这个:

struct TripleNavView: View {

var body: some View {
NavigationView {

Text("Column 1")
.toolbar {
ToolbarItem {
Button(action: {}, label: {Image(systemName: "sidebar.left")})
}
}
Text("Column 2")
.toolbar {
ToolbarItem {
Button(action: {}, label: {Image(systemName: "plus")})
}
}
Text("Column 3")
.toolbar {
ToolbarItem {
Button(action: {}, label: {Image(systemName: "trash")})
}
}
}
.navigationTitle("Title")
}
}
产生这个:
3 Column Navigation View, with toolbar items on each column
重要的是第 2 列和第 3 列都需要有 ToolbarItem某种。如果你只在其中一列上放置一个按钮,那么 SwiftUI 会将它一直放在工具栏的后缘,并破坏外观。
Window with incorrect toolbar
因此,如果您不想要特定列上的按钮,请替换 Spacer代替按钮。
3 Column Navigation view, with no toolbar item in column 2
请注意,将其留空或使用 EmptyView()不会工作 - SwiftUI 会优化它,并表现得好像你没有包含 ToolbarItem首先!

关于macos - SwiftUI macOS 工具栏图标对齐三栏布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66168634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com