在SwiftUI中跟踪侧边栏工具栏项

3

是否有一种官方的方式在SwiftUI中实现一个等效于NSTrackingSeparatorToolbarItem,并且保持一致性?

我正在制作一个具有2种可能的工具栏状态的应用程序,两者都有一个“切换侧边栏”按钮,我希望它在实际的侧边栏中,就像Xcode一样。我使用了一个NavigaionView并按以下方式添加侧边栏按钮:

NavigationView {
  List(selection: $selection) {
    ForEach(app.menuItems) { menuItem in
      Section(header: MenuSectionHeader(menuItem.name)) {
        OutlineGroup(menuItem.children ?? [SidebarItem](), children: \.children) { child in
          Label(child.name, systemImage: child.icon)
        }
      }
    }
  }
  .toolbar {
    ToolbarItem(placement: .automatic) {
      Button(action: toggleSidebar) {
        Icon(icon: "sidebar.left", .textDim)
      }
    }
  }

  DetailsView()
    .toolbar {
      // ...rest of the toolbar...
    }
}

这个组件有两种状态中的一种:

展开侧边栏

折叠侧边栏

但在另一种状态下,.automatic的放置将它推到了中心区域旁边:

错误的放置

在官方的ToolbarItemPlacement文档中并没有提到如何强制使ToolbarItem位于侧边栏中,但是考虑到自动位置有时会将其推到那里,也许我缺少一些东西。

欢迎任何想法!


你尝试过其他的放置方式吗?比如明确指定为.navigation或.navigationBarLeading等吗? - Asperi
@Asperi 是的,我尝试了macOS上所有可用的选项(即.navigationBarLeading仅适用于iOS),但它们都没有起作用。有些甚至只是将该项从工具栏中隐藏。 - max
1
顺便提一下,我正在尝试使用 Ventura 中即将推出的 NavigationSplitView,并且默认情况下在 .navigation 部分插入了一个切换侧边栏按钮。我想知道是否有一种方法可以对其进行样式设置或将其移动到其他位置,在文档中找不到任何信息。 - max
有关NavigationSplitView的新发现吗? - ChrisR
1个回答

0
如果您想将工具栏项放置在侧边栏内部,请将工具栏修饰符附加到带有SidebarStyle的列表上。
List {
    Text("foo")
    Text("bar")
}
.listStyle(.sidebar)
.toolbar {
    ToolbarItemGroup {
        Button(action: {}, label: {
            Image(systemName: "sidebar.left")
        })
        Spacer()
        Button(action: {}, label: {
            Image(systemName: "play.fill")
        })
        Button(action: {}, label: {
            Image(systemName: "stop.fill")
        })
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接