SwiftUI - 具有 .window 样式的 MenuBarExtra:ScrollView 的布局问题

SwiftUI - MenuBarExtra with .window style: Layout issue with ScrollView

提问人:matryx87 提问时间:11/15/2023 最后编辑:matryx87 更新时间:11/18/2023 访问量:68

问:

我试图为 macOS 创建一个菜单栏应用程序,但由于它在滚动中包含多个视图,正如您可能想象的那样,我不得不使用 ..menuBarExtraStyle(.window)

目前为止,一切都好。

关键是:我第一次打开菜单时,高度似乎布局正确,但从第二次开始,视图的大小会调整到某个较小的高度量。 您可以尝试使用以下简单代码段:

MenuBarExtra("", systemImage: "info") {
    ScrollView {
        VStack(alignment: .leading) {
            ForEach(0..<100) {
                Text("Row \($0)")
            }
        }
    }
}
.menuBarExtraStyle(.window)

更改以解决问题,但当然您不能构建自己的布局、功能等......利用风格只是显示。.menuBarExtraStyle(.window).menuBarExtraStyle(.menu).window

即使为 ScrollView 设置最大高度 - - 似乎也无法解决此行为。.frame(maxHeight: maxHeight)

示例代码中 VStack 的结果设置相同。.frame(maxHeight: .infinity)

有人遇到过这个问题吗?也许有一种合适的方法可以继续构建这种保持高度稳定的布局?

swift macOS SwiftUI -菜单 菜单栏额外

评论

0赞 Sweeper 11/16/2023
为什么您第一次打开菜单时认为结果是“正确的”?高度可能超过某些屏幕的高度,您甚至无法滚动。第二次打开时的高度应该是正确的。
0赞 matryx87 11/16/2023
嗨,清扫工!我认为这是正确的,因为我的期望和尝试: 正如我所写的,如果您添加到 ScrollView,修饰符 - 例如maxHeight可能在哪里,它仍然会折叠。您可以使用我共享的代码轻松尝试。如果您有任何建议来调整滚动视图的高度以适应其内容,何时是,我很乐意尝试。事实上,正如我所说,奇怪的是,如果样式是 ,它就可以正常工作。谢谢你的回答 😉.frame(maxHeight: maxHeight)NSScreen.main?.visibleFrame.size.height.menuBarExtraStyle.window.menu

答: 暂无答案