防止 NSPopover 剪切到屏幕外 - Swift 5

问题描述 投票:0回答:1

我目前正在开发一个 MacOS 菜单栏应用程序,我的 NSPopover 相当宽(450 像素)。由于其宽度,如果用户没有其他菜单栏项目占用空间,它就会从屏幕上剪掉(请参见下图以获取视觉示例)。

这是我将弹出窗口添加到屏幕的代码:

popover?.show(relativeTo: statusBarButton!.bounds, of: (statusBarButton)!, preferredEdge: .minY)

我已经尝试过这里建议的答案:https://stackoverflow.com/a/48604455/13949789。问题是箭头不跟随,造成非常奇怪的外观(请参见下图的视觉示例)。

位置不错,但箭头位于错误的位置(使用其他帖子的建议):

位置不好,但箭头在正确的位置:

swift xcode user-interface popover nspopover
1个回答
0
投票

我知道这是一个老问题,但我今天偶然发现了同样的问题,我想我应该分享我的解决方案......

我的解决方法是在调用

show()
之前为弹出窗口设置明确的大小。

popover.contentViewController = NSHostingController(rootView: SomeView())
popover.contentSize = NSSize(width: 600, height: 300) // <= that's what did it
popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
© www.soinside.com 2019 - 2024. All rights reserved.