设置 QLPreviewingController 的 preferredContentSize 会中断自动调整大小

Setting preferredContentSize of QLPreviewingController breaks auto resizing

按照这里的回答: 我设置了 QLPreviewingControllerpreferredContentSize,这会按预期更改 window 大小,但这似乎会破坏所有子视图的后续自动调整大小。设置后,当用户手动调整大小或进入全屏时,内容将不再跟踪预览window大小。

在设置 preferredContentSize 属性 后,任何试图以编程方式设置视图大小、调整蒙版大小或约束的尝试都会导致类似

的错误
<NSViewServiceMarshal: 0x7fe1b740f170 <QLPreviewExtensionViewController: 0x600000e31b00 <NSServiceViewControllerWindow: 0x7fe1b760b350>>> attempted to set frame of <NSServiceViewControllerWindow: 0x7fe1b760b350> from {{17, 382}, {820, 846}} to {{17, 382}, {800, 600}} and got {{17, 136}, {820, 846}}; set breakpoint on -[NSViewServiceMarshal actualFrame:differsFromSpecifiedFrame:oldFrame:ofWindow:] to catch this

并没有明显的效果。设置断点只告诉我它发生在系统后台线程中,大约在我尝试更改视图大小时。

编辑:另一个发现:如果我将所有视图的帧值和 window 打印到日志中,打印的尺寸就是我要求的尺寸,而不是屏幕上实际显示的较小尺寸! IE。如果我将 preferredContentSize 设置为 (820, 846),我的调试 NSLogs 和 Xcode 调试视图层次结构显示 window 即 820 x 846,而屏幕上显示的实际 window 是两倍高又宽。

编辑:制作了一个视频来说明这个问题:https://youtu.be/l7b1jq7pDWY

原代码在这里: https://github.com/angstsmurf/spatterlight/blob/quicklook-ifiction/iFictionQuickLook/iFictionPreviewController.m

这似乎是 Catalina 独有的错误(早期版本不支持这种 Quicklook 扩展。)升级到 Big Sur 后它消失了。