objective-c - 设置 QuickLook 插件的窗口大小

标签 objective-c cocoa quicklook

我正在构建一个 QuickLook 插件。我想更改用户点击空格键时弹出的窗口的宽度。

我读到项目的 info.plist 文件中有两个键可以自定义高度和宽度。即使我更改了这些值,我也无法将预览窗口的大小设置为我想要的大小。

我不知道还能尝试什么。有什么想法吗?

谢谢!

最佳答案

我想我会深入研究一下。我没有尝试过以下任何建议,所以没有人抱有希望。我假设您正在使用生成器回调:

OSStatus (*GeneratePreviewForURL)(
    void *thisInterface,
    QLPreviewRequestRef preview,
    CFURLRef url,
    CFStringRef contentTypeUTI,
    CFDictionaryRef options
);

首先,您可以手动检查 options 字典参数并验证 kQLPreviewPropertyWidthKeykQLPreviewPropertyHeightKey 键确实映射到所需的CFNumber 值。

关于这些属性中的每一个,Apple QuickLook 编程指南说:

Note that this property is a hint; Quick Look might set the width automatically for some types of previews. The value must be encapsulated in a CFNumber object.

(编辑:如果您的预览表示是灵活的,您可以尝试找到一种预览类型,让 QuickLook 遵循您的尺寸提示,按照上面的声明。只是一个想法。)

在 QuickLook 框架二进制文件上运行 nm 揭示了一些未记录的 kQLPreviewProperty-- 常量以及上述宽度和高度键。 kQLPreviewPropertyAutoSizeKey 引起了我的注意。回顾 Apple 关于忽略提示以自动设置大小的声明,这可能很重要?按照 QuickLook.framework/Headers/QLBase.h 中的约定,您可以尝试声明

extern const CFStringRef kQLPreviewPropertyAutoSizeKey;

然后您可以尝试将 CFNumber 0 与 options 字典中的该属性键相关联。还有其他未记录的键,例如 kQLPreviewPropertyAttributesKey

回到你提到的Info.plist,Apple says关于那些键 QLPreviewWidthQLPreviewHeight:

This number gives Quick Look a hint for the width (in points) of previews. It uses these values if the generator takes too long to produce the preview. (emphasis added)

这是有人提出在您的生成器中调用 sleep() 的糟糕建议的地方。但我对 为什么 Apple 会根据生成器延迟来遵循大小提示感到困惑。 (?)

编辑:另请注意,上面的声明说 Info.plist 提示必须以点(而不是像素)表示,unit取决于用户的屏幕分辨率。

关于objective-c - 设置 QuickLook 插件的窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182887/

相关文章:

ios - 无法发出 URL 的文件扩展名

iOS 简单视觉格式布局不起作用

objective-c - 如何在基于文档的应用程序中编写/保存纯纯文本文件?

xcode - 快速浏览一下 Swift 中的 NSView

c - 什么是双星(例如 NSError **)?

objective-c - WKWebView 的打印内容 (OS X)

objective-c - 如何使用quicklook插件分发App

ios - writeToFile 在 iOS 7 上工作而不在 iOS 6 上工作

ios - 调度队列和信号量

ios - 另一个 UIView 的 UIView subview 是 UIViewController 的 subview ,在 iOS 中没有以 UIViewController 为中心