【问题标题】:NSButton wrap title dynamicallyNSButton 动态包装标题
【发布时间】:2022-01-25 01:29:03
【问题描述】:

我想要完成的事情: 我需要一个带有标题文本的复选框,该复选框根据父视图建立的动态宽度在多行上动态换行和中断。我需要一个可以在 IB 中使用的解决方案,它会在运行时显示在那里。我正在使用 XCode 13.1,在针对 MacOS 的 XIB 文件中工作。

我在做什么: 我在 IB 中创建了一个 NSButton。在属性检查器中,我将其样式设置为Check,在“控制”下,我为“换行符”选择Word Wrap,最后我设置了一个很长的文本作为标题,例如Asd Asd Asd lit tle words and many of them asd asd lit tle ones

发生了什么: 如上所述设置按钮(案例 1) 并缩小其宽度时,它将在 IB 和运行时显示 - 如下所示:

Option + Enter案例 2,此处在“them”之后)按照this similar question 中的建议手动为标题添加换行符时,标题开始换行正确并生成所有其他必要的中断:

但是,此解决方案不适用于我的情况,因为它仅适用于静态宽度,但我的复选框需要如上所述动态调整其宽度。

如果没有额外的手动换行符,最有趣的是,复选框显然已经根据标题的新包装高度做出反应并更改其位置,而标题文本本身只是被控件的边界剪裁而不是显示以包裹的方式。

我的期望: 我希望标题在案例 1 中换行。因为它没有:这是错误还是功能?如何使案例 1 工作并根据按钮的长度和宽度使标题动态换行?我只需要在我错过的检查器中设置另一个属性吗?还是只有程序化解决方案?

要回答我为什么不使用适当的短标签的问题:不要问我,我只是遵循规范和要求的开发人员,不幸的是,我对会是什么没有意见这里的文字很长。

【问题讨论】:

  • 这能回答你的问题吗? Wrap NSButton title
  • 我找到了这个帖子;不幸的是没有帮助。标记的答案(以及其他答案)建议使用较短的文本,这是不适用的,或者是 NSButtonCell 的子类,但没有给出说明。另一个答案建议添加换行符(我这样做了),但这仅适用于静态情况,而不适用于动态情况。将 NSControl 子类化对我也没有用处,因为我将在大量单行复选框之外使用它们,这些复选框都应该以相同的方式工作。此外,我需要对 Bindings 提供完整的 IB 支持。
  • AppKit 不支持多行复选框。简短的标题和系统偏好设置中的“退出应用程序时关闭窗口”设置之类的解释怎么样?
  • 嘿@Willeke,谢谢你的建议!不幸的是,通过更改规范来进行任何类型的 GUI 改进,有效地定义问题是不可能的。我需要让它看起来像任何其他单行复选框。尽管如此,由于您声明 AppKit 不允许这样做,我已经停止调整按钮以完成不可能的事情,而是寻找合适的解决方法。看看下面的答案。

标签: xcode macos cocoa interface-builder


【解决方案1】:

此答案归功于@Willeke 的评论:“AppKit 不支持多行复选框。”案例 1 中复选框的有趣行为表明其他情况似乎只是一个小故障或错误。

我最终得到的结果:我选择了一种解决方法。我在多行标签旁边放置了一个复选框按钮(在 IB 中图像位置为“仅图像”),将两者放在自定义视图中,添加必要的约束。通过一些定位调整,我知道有一个看起来完全像单行复选框的解决方案,我可以在 IB 中复制粘贴,并通过自动布局解决 - 在 IB 和运行时 - 无需任何额外代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多