【问题标题】:How can I disable and even remove the option of EnterFullScreen in View menu in macOS in SwiftUI?如何在 SwiftUI 的 macOS 的视图菜单中禁用甚至删除 EnterFullScreen 选项?
【发布时间】:2022-11-16 19:01:33
【问题描述】:

我创建了一个 HelloWorld macOS SwiftUI 项目,我看到了选项进入全屏看法菜单,那么如何删除此选项并在 SwiftUI 中禁用它?

   @main
struct testApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

【问题讨论】:

    标签: swift macos swiftui


    【解决方案1】:

    您可以使用 UserDefaults 通过将键“NSFullScreenMenuItemEverywhere”设置为 false 来更改此设置,如 this answer 中所示,但如果您在 applicationWillFinishLaunching 中执行此操作,则如该答案中那样,则为时已晚,无法生效,因此请将其移至 @987654324 @ 在你的 App 结构中

    init() {
         UserDefaults.standard.set(false, forKey: "NSFullScreenMenuItemEverywhere")
    }
    

    如果您更愿意为此使用 AppStorage 属性包装器,它可能看起来像这样

    @AppStorage("NSFullScreenMenuItemEverywhere") var fullScreenEnabled = false
    
    init() {
         fullScreenEnabled = false
    }
    

    【讨论】:

      【解决方案2】:

      最简单的方法是为视图定义最大尺寸,然后告诉窗口组使用内容尺寸作为窗口尺寸的限制。

      例如:

      struct TestApp: App {
            var body: some Scene {
              WindowGroup {
                  ContentView()
                    .frame(maxWidth: 400, maxHeight: 500)
              }
              .windowResizability(.contentSize)
          }
      }
      

      由于窗口现在不能超过您设置的大小,因此它没有资格成为全屏窗口,SwiftUI 会自动禁用菜单中的选项。

      经过一些实验后,.windowResizability(.contentSize) 似乎需要小于屏幕的最大视图大小——如果您提供的值大于当前屏幕分辨率,则全屏选项将重新启用。

      您当然可以省略最大值,在这种情况下,窗口将是基于内容的固定大小。

      【讨论】:

      • 你错过了重点,问题是关于菜单项全屏
      • 该代码禁用菜单项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2021-08-09
      • 2017-04-24
      • 1970-01-01
      相关资源
      最近更新 更多