问题描述
按照这里的答案:
Set QuickLook window size when previewing with QLPreviewingController.preparePreviewOfFile 我设置了 preferredContentSize
的 QLPreviewingController
,这会按预期更改窗口大小,但这似乎会破坏所有子视图的后续自动调整大小。设置后,当用户手动调整大小或进入全屏时,内容将不再跟踪预览窗口大小。
在设置 preferredContentSize
属性后以编程方式设置视图大小、调整蒙版大小或约束的任何尝试都将导致类似
<NSViewServiceMarshal: 0x7fe1b740f170 <QLPreviewExtensionViewController: 0x600000e31b00 <NSServiceViewControllerWindow: 0x7fe1b760b350>>> attempted to set frame of <NSServiceViewControllerWindow: 0x7fe1b760b350> from {{17,382},{820,846}} to {{17,{800,600}} and got {{17,136},846}}; set breakpoint on -[NSViewServiceMarshal actualFrame:differsFromSpecifiedFrame:oldFrame:ofWindow:] to catch this
并且没有明显的效果。设置断点只会告诉我它发生在系统后台线程中,大约在我尝试更改视图大小的时候。
编辑:另一个发现:如果我将所有视图和窗口的帧值打印到日志中,打印的大小就是我请求的大小,而不是实际显示在屏幕上的较小的大小! IE。如果我将 preferredContentSize 设置为 (820,846),我的调试 NSLogs 和 Xcode 调试视图层次结构会显示一个 820 x 846 的窗口,而屏幕上显示的实际窗口的宽度是高度的两倍。
编辑:制作了一个视频来说明这个问题:https://youtu.be/l7b1jq7pDWY
原始代码在这里: https://github.com/angstsmurf/spatterlight/blob/quicklook-ifiction/iFictionQuickLook/iFictionPreviewController.m
解决方法
这似乎是 Catalina 唯一的错误(早期版本不支持这种 Quicklook 扩展。)升级到 Big Sur 让它消失了。