带有分段控件的 NSToolbarItem - 图像未正确渲染

2024-04-22

我正在尝试模拟 Xcode 的工具栏控件来显示/隐藏导航器和检查器:

...但没有底部窗格(仅左侧和右侧:两段)

我从 Xcode 的 UI 中截取图标,并在图像编辑应用程序中跟踪它们。左窗格的资源是:


@1x:

(20x20 @72 dpi)


@2x:

(40x40 @72 dpi,尽管使用 20x20 @144 dpi 似乎没有什么区别)


右窗格的对应部分是相同的,但水平翻转。

所有资源都存放在asset目录中,如下:

我将一个分段控件放在工具栏上,以创建一个内部包含分段控件的工具栏项,并为每个分段(0 和 1)设置图像属性。

两个片段的图像缩放比例均设置为“按比例缩小”。段控件已选中段宽度“固定”,两个段的宽度均为 48。工具栏项目的最小尺寸为 (83 x 25),最大尺寸为 (100 x 28)。

图标在情节提要(Interface Builder)上正确显示。

但是,当我运行该应用程序时,我无法正确显示图标图像。

  • 如果我在视网膜显示器上启动我的应用程序,则任一部分上都不会显示图标。
  • 如果我将窗口移动到外部非视网膜显示器,两个图标都会显示。
  • 如果我从目录中删除两个图像集之一并运行该应用程序,另一个图标正确显示!(在任一监视器上)
  • 如果我进一步为两个片段设置相同的剩余图像,它们将正确显示!
  • 如果我将两个图像集保留在项目中,但重置Image将其中一个段中的字段清空,另一个图标也不会显示!

到底发生了什么事?

我已经放了一个GitHub 上的示例项目 https://github.com/nicolas-miari/NSToolbarItem-Segment-Image-Issue重现了这个问题。


编辑:为了确保,我使用 cartool 命令行实用程序从编译的应用程序二进制文件中提取了资源(如中所述这个答案 https://stackoverflow.com/a/29468398/433373),并且所有 4 张图像的尺寸都正确......


解决方案:正如建议的伊万的回答 https://stackoverflow.com/a/45794124/433373下面,我改用矢量图形 (PDF) 作为图标。我下载了 Acorn 的试用版,并以 1 倍大小重新创建了图标,然后导出为 PDF。

为了避免在运行时放大 @2x 尺寸时出现模糊,我必须确保编辑器中的所有坐标都是整数,并且还要在矢量形状检查器中为每个形状图层选中“捕捉到像素”框:

(美好的结局)

$ git commit -m "Fix toolbar icons for good (PDF)"

根据我的经验,在工具栏中使用位图很麻烦。您可以尝试准确定位推荐的解决方案,以避免出现一些问题:https://developer.apple.com/macos/ human-interface-guidelines/icons-and-images/custom-icons/ https://developer.apple.com/macos/human-interface-guidelines/icons-and-images/custom-icons/

然而,最简洁的方法是使用矢量 (pdf) 图标,因为它们只是按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有分段控件的 NSToolbarItem - 图像未正确渲染 的相关文章

随机推荐

  • 从覆盖率报告中删除自动生成的异常代码

    让我们从一个最小的工作示例开始 主要 cpp include
  • C# 在枚举中使用数字

    这是一个有效的枚举 public enum myEnum a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 0xff 但这不是 public enum myEnum 1a 1 2a 2 3a 3 有没有办法在枚举中使用数字 我已经
  • 在 Ember.js 中,为什么绑定到数组在 {{#each}} 之外不起作用?

    在下面的代码中 我渲染了 3 个视图 第二个和第三个视图渲染App controller a 单击第一个视图会发生变化App controller a 单击时 第三个视图会更新其内容 第二个视图不更新其内容 为什么 我认为第二个视图绑定到数
  • open() 尝试打开管道进行读取时会阻塞

    我有两个进程 一个服务器和一个客户端 它们应该通过管道 C Linux 进行通信 服务器打开管道O RDONLY标志 以及客户端O WRONLY 然而 服务器阻塞在open函数 而客户端似乎运行成功 open函数返回成功 因此write功能
  • dplyr 就地突变[重复]

    这个问题在这里已经有答案了 这是我的例子 library dplyr a lt c 0 2 1 3 df test lt data frame a df test gt mutate a round a 0 它产生 a 1 0 2 1 但不
  • R传单和闪亮如何清除地图点击数据

    下面的例子摘自RStudio 教程 http rstudio github io leaflet shiny html传单上 我稍微修改了一下以适应我的问题 我有一张地图 这里是地震 我使用它在地图上绘制addCircleMarkers单击
  • NSLayoutConstraint 常量设置后不更新

    我有一个UIView具有相应的子类xib文件 在我的 xib 中我有一个NSLayoutConstraint我正在尝试为其设置动画的属性 我有一个animateIn方法 问题是只有 animateIn 方法有效 当我尝试再次更新常量时 它只
  • 正则表达式捕获第 n 个匹配项

    有没有办法使用正则表达式返回第 n 次出现 我确实搜索了论坛 只找到了超出正则表达式本身的解决方案 即需要编程语言的支持 例子 正则表达式 d d 3 d 2 Input thiscanbeanything 25 74thiscanbeso
  • RealityKit – 什么是 `steelBox` 实例加载?

    当您使用标准 Xcode 模板创建增强现实项目时 Xcode 会添加以下内容swift文件到您的项目 Experience swift GENERATED CONTENT DO NOT EDIT import Foundation impo
  • PHP - 以某种方式哈希对象,具有相同字段值的不同对象具有相同的哈希值

    我正在寻找一种方法来为 PHP 对象生成某种哈希值 通用解决方案 如果可能的话 可以使用所有分类的 内置的和自定义的 SplObjectStorage getHash 不是我正在寻找的 因为它会为给定类的每个实例生成不同的哈希值 为了描述这
  • Android 上带有 asynctask 的 Webview

    我想做的是进度对话框等待加载项目webview 我该怎么做dialog dismiss 事件取决于加载项目webview public class asynctask extends AsyncTask
  • 静态链接库时出现 glew 链接器错误

    我正在尝试在 Visual Studio 2012 中构建一个 opengl 项目 我想静态包含 glew 库 因此我从源代码构建它并将生成的 glew32sd lib 复制到我的 lib 目录 我将此 lib 路径提供给 Visual S
  • 有关 Jquery/Masonry 的帮助,小调整

    对于我的一生 我无法弄清楚到底发生了什么 我缺乏 Jquery 知识可能与此有关 看看这个 http jsfiddle net ryanjay fgNMJ http jsfiddle net ryanjay fgNMJ 加载页面时 每张照片
  • 我应该如何比较这些双打以获得所需的结果?

    我这里有一个简单的示例应用程序 我在其中进行乘法和加法double变量 然后将它们与预期结果进行比较 在这两种情况下 结果都等于预期结果 但当我进行比较时 它失败了 static void Main string args double a
  • 禁用 KeyGaurd 后无法重新启用它

    我写了下面的代码来切换KeyGaurd我的 Android 手机使用切换按钮 但我面临着一种奇怪的行为 它禁用keygaurd成功了但是 不重新启用 btnToggleLock setOnClickListener new OnClickL
  • PowerShell 的嵌套数据类型输出

    我正在尝试从某些输入创建嵌套数据结构并最终将其转换为 JSON 但一旦它变得太深 我就会遇到麻烦 该结构将是一个哈希数组 其中一项是另一个哈希数组 这设置了两个哈希数组 baz1 and baz2 PS D gt baz1 foo foo1
  • 如何从 C# 等托管代码中使用 ActiveX 组件的嵌入式免注册清单?

    我想使用未在系统或用户范围内注册的特定版本的 ActiveX 组件 如果我使用清单文件 一切都会按预期工作 但是 嵌入式清单仅适用于 C 客户端代码 这是依赖声明
  • 如何为 jqGrid jsonify“添加”帖子/参数

    这个人要杀了我 我读过很多Oleg https stackoverflow com users 315935 oleg的评论 并通过文档 http www trirand com jqgridwiki doku php id wiki fo
  • 树枝中不允许使用convert_encoding

    为了转换我的法语 html 口音 我尝试通过在 Twig 中执行以下操作来更改编码 ddf description convert encoding UTF 8 HTML ENTITIES 但这是我收到的消息 渲染模板期间引发异常 注意 i
  • 带有分段控件的 NSToolbarItem - 图像未正确渲染

    我正在尝试模拟 Xcode 的工具栏控件来显示 隐藏导航器和检查器 但没有底部窗格 仅左侧和右侧 两段 我从 Xcode 的 UI 中截取图标 并在图像编辑应用程序中跟踪它们 左窗格的资源是 1x 20x20 72 dpi 2x 40x40