使用 Swift UI 自定义 macOS 工具栏

2024-04-07

我正在开发一个 macOS 应用程序,其视图层是用 SwiftUI 编写的。我知道 iOS 工具栏至少可以更改背景颜色,但是当我尝试在 macOS 中执行此操作时,它的行为并不符合我的预期。

这是一个(简化的)示例:

struct ContentView: View {
    var body: some View {
        NavigationView {
            Collections()
                .layoutPriority(0)
            
            Photos()
                    .frame(maxWidth: .infinity, minHeight: 300, maxHeight: .infinity)
                    .background(Color.Alt.black)
                    .layoutPriority(1)
        }
        .toolbar {
            Toolbar().background(Color.red500)
        }
    }
}

struct Toolbar: View {
    var body: some View {
        Group {
            Slider(value: 250, in: 150...400) {
                Text("Toolbar.PreviewSize")
            } minimumValueLabel: {
                Image(systemName: "photo").resizable().scaledToFit().frame(width: 15)
            } maximumValueLabel: {
                Image(systemName: "photo").resizable().scaledToFit().frame(width: 23)
            } onEditingChanged: { _ in
                // do nothing
            }.frame(minWidth: 200)
                
            Spacer()
                    
            Text("Toolbar.SelectionCount")
                    
            Spacer()
                    
            AddPhotosButton()
        }
    }
}

这会产生类似这样的结果,正如您所看到的,它不会将背景颜色应用于整个工具栏,而仅应用于工具栏中的项目:

我想我可以自己做WindowToolbarStyle风格,但没有关于协议的文档!

如果我制作自己的工具栏作为View而不是与.toolbar修改器,当侧边栏折叠时,我无法读取窗口交通按钮的安全区域插入,导致一团糟:

谢谢你的帮助!


我认为您遇到的问题是工具栏有一个您需要明确忽略的“安全区域”。这可以通过以下代码来完成。

.toolbar { 
     // your toolbar code 
}.background(Color.gray.ignoresSafeArea())

The toolbarBackground修饰符仅适用于 macOS 13.0 及更高版本,因此如果您需要向后兼容性,它不会是一个通用答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Swift UI 自定义 macOS 工具栏 的相关文章

随机推荐

  • 我们如何在 Perforce 中识别父分支?

    假设我有一个主要分支 项目 主 然后我从主分支创建了新分支 项目 1 0 然后我再次从 1 0 创建了分支 项目 2 0 现在 如果有人想知道2 0分支是从哪个分支创建的 用户如何识别呢 选择一个文件并使用 Perforce 修订图查看特定
  • OpenCV 与 Python 错误 - 二进制操作中断言失败 ((mask.type() == CV_8UC1 || mask.type() == CV_8SC1))

    我正在尝试在网络摄像头源上覆盖图像 这是代码的主要部分 Load our overlay image glasses png imgGlasses cv2 imread 1 png Create the mask for the glass
  • 为什么将应用程序上传到 Play 商店后,谷歌地图服务无法运行?

    我的应用程序已准备就绪 并且在上传到 Google Play 商店之前运行良好 当我将应用程序上传到 Play 商店后 谷歌地图服务无法正常工作 由于某种原因地图是空的 为什么会发生这种情况 您需要获取发布密钥 https develope
  • 如何在nodejs服务器中设置HTTP Keep-Alive超时

    我实际上正在对 ExpressJS 服务器进行一些负载测试 我注意到服务器发送的响应包含一个 Connection Keep Alive 标头 据我了解 连接将保持打开状态 直到服务器或客户端发送 连接 关闭 标头 在一些实现中 连接 保持
  • 通过反射更改私有最终字段

    class WithPrivateFinalField private final String s I m totally safe public String toString return s s WithPrivateFinalFi
  • 如何处理Task.Run异常

    我在捕获异常时遇到问题Task Run这是通过更改代码解决的 如下所示 我想知道这两种方式处理异常之间的区别 In the Outside方法我无法捕获异常 但是在Inside方法我可以 void Outside try Task Run
  • 在Python上将字符串转换为日期类型[重复]

    这个问题在这里已经有答案了 我有这个字符串 2012 02 10 year month day 我需要它作为日期类型才能使用日期函数isoweekday 有谁知道如何将此字符串转换为日期 虽然问题似乎是根据OP的要求得到回答的 但没有一个答
  • 类不是 Angular 模块 - 仅在 IntelliJ/Webstorm 中导入本地构建的 Angular 库时

    我正在尝试使用在单独的 Angular 应用程序中存在的库 项目 中实现的 Angular 模块 在 IntelliJ 中我收到错误Class MyModule is not an Angular module当我可以成功运行时 所有库似乎
  • C# 从类列表中提取字段列表

    我有某个类的元素列表 该类包含一个字段 class Foo public int i List
  • 如何从 Playground 中的 Readline 访问变量

    我面临一个挑战 需要提供两行数据 2 3 1 2 3 4 5 我必须访问这些数据并将其放入两个变量 2 和 3 中 并将第二行放入一个数组中 我认为这个挑战的一部分是阅读该行并执行以下操作 func readIntegers gt Stri
  • React Native 上的浮动操作按钮

    我想在屏幕右下角的 React Native Android 中使用浮动操作按钮 但我不能这样做 The 创建按钮组件包含浮动按钮代码 我在列表视图之后调用了 CreateButton 组件 我想在 ListView android 组件上
  • 如何在 R 中使用 if-else 条件赋值

    我有一个带有 a 列的数据框 我想根据 a 列添加不同的 b 列 For if a gt 10 b double Otherwise b single 我该怎么做 示例输出 a b 2 single 2 single 4 single 11
  • 写入 Unicode 文件

    我在 c 程序中写入 unicode 文件时遇到一些问题 我正在尝试将 unicode 日语字符串写入文件 当我去检查文件时 尽管它是空的 如果我尝试使用非 unicode 字符串 它就可以正常工作 我究竟做错了什么 setlocale L
  • 红宝石导轨包括?数组[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 是否可以检查数组内的包含数组 我想检查是否 primary 1 2 3 包括secondary 2 3 我努力了primary includ
  • Groovy 属性迭代

    在下面的 Groovy 代码中 我替换了feck arse drink实例的属性Foo与那些实例Foo2 class Foo def feck fe def arse ar def drink dr class Foo2 def feck
  • 如何将 Web 部件页面添加到站点定义?

    我必须为必须包含预定义 Web 部件页面的客户端创建站点定义 我可以创建 Web 部件页面 但在创建时将它们附加到网站时却不知所措 我知道通过 SharePoint 创建的 Web 部件页面存储在文档库中 我是否需要预先填充 Web 部件页
  • 尝试使用 JavaScript 访问使用 生成的 SVG 元素

    我正在尝试使用 JavaScript velocity js 为我定义的 SVG 制作动画
  • 如何撤消从功能分支提交到主线的更改,同时保持分支最新?

    有时 我们会遇到将功能分支提交到基线的问题 并发现在某些情况下它可能会出现严重错误 因此需要恢复更改 而不会丢失此后完成的所有其他提交 然而 需要有人继续在原来的分支上工作 我不想使用git rebase在主线上改变历史 因为这本身就会导致
  • 如何从其他 Ruby 脚本调用标准 Rakefile 中定义的 Rake 任务?

    是否可以调用在 a 中定义的任务Rakefile 不在somefile rake 来自其他 Ruby 脚本 我希望创造一个新的Rake Application会自动加载Rakefile来自同一目录 但似乎情况并非如此 这是我到目前为止想到的
  • 使用 Swift UI 自定义 macOS 工具栏

    我正在开发一个 macOS 应用程序 其视图层是用 SwiftUI 编写的 我知道 iOS 工具栏至少可以更改背景颜色 但是当我尝试在 macOS 中执行此操作时 它的行为并不符合我的预期 这是一个 简化的 示例 struct Conten