有没有办法以编程方式确定 Apple 内置控件的正确尺寸?

2024-01-02

在编写 Cocoa 应用程序时,我以编程方式完成大部分用户界面布局。例如:

NSRect popUpFrame = NSMakeRect(10, 10, 100, kDefaultPopUpButtonHeight);
NSPopUpButton * popUp = [[NSPopUpButton alloc] initWithFrame:popUpFrame];
//...

我的问题是关于这个的kDefaultPopUpButtonHeight持续的。我目前维护一个充满此类常量的源文件,并手动填写适当的大小。我可以通过将新控件放入 Interface Builder 中的空白视图中,然后检查其属性以查看 IB 为其提供的大小来确定正确的大小。

一定会有更好的办法。是否可以在运行时访问这些值?理想情况下,我希望每一个NSControl有一个类似的类方法:+(NSSize)defaultSize,或者,对于像这样的控件NSButton根据所使用的特定按钮样式具有不同的默认大小,例如+(NSSize)defaultSizeForButtonStyle:(NSButtonStyle)buttonStyle.

Apple 的人机界面指南 http://developer.apple.com/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHIGIntro.html有关于控件布局和间距的信息between控件,但它没有说明各个控件的正确大小。


我同意 Peter 的观点,并建议您使用 Interface Builder。但如果这不适合您的情况,可以通过以下一种方法找到大多数控件的最佳大小:

NSSize idealSize = [[control cell] cellSize];

如果您需要对大小进行更多控制,可以使用 -[NSCell cellSizeForBounds:] 方法。

此外,cellSize 实际上为您提供了控件的最小尺寸,而不一定是最佳尺寸。例如,对于带有文本“OK”的 Cocoa aqua 样式按钮,它将返回比 HIG 建议的宽度更窄的宽度。出于您的目的,听起来您只对尺寸的固定高度部分感兴趣。 -[NSCell cellSize] 应该很好用。

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

有没有办法以编程方式确定 Apple 内置控件的正确尺寸? 的相关文章

  • Flutter 容器的 onTap 方法

    一直在开发一个 flutter 应用程序并根据一些 Firebase 数据动态构建一些容器 我想知道是否有办法获得容器的 onTap 方法 或任何不是按钮的小部件 这是一个代码示例 child new Container INSERT ON
  • 如何将事件侦听器与“请求”事件结合起来?

    我为终端编写了一个简单的小迷宫游戏 它反复要求用户做某事 例如 您想朝哪个方向走 N E S W 我有一个navigate 方法在循环中运行 触发这些问题 存储答案并根据答案执行某些操作 public enum Dir N E S W pu
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • Cocoa 卸载驱动器但不弹出它

    你知道要卸载驱动器吗without将其弹出 NSWorkspace有一些卸载驱动器的方法 但它也会弹出它们 任何想法 我按如下方式执行此操作 它会卸载驱动器但不会弹出它 其实我想弹出磁盘 只能卸载磁盘 P 请分享如何弹出磁盘 DASessi
  • 表视图未根据绑定更新

    这是一个非常新手的问题 这是我以前做过很多次的事情 但这次我遗漏了一些东西 在我的 AppDelegate h 文件中 我声明一个 NSArray 并将其设置为属性 interface AppDelegate NSObject NSArra
  • NSImage 的 ressizedImageWithCapInsets ?

    In UIKit我们有 UIImage resizableImageWithCapInsets UIEdgeInsets capInsets 有类似的东西吗AppKit用于创建可平铺的NSImage NSImage 在 10 10 Yose
  • 在 Swift 3 中以编程方式创建没有 XIB 的 NSViewController

    我正在尝试在不使用 Interface Builder 的情况下制作 macOS 应用程序 我的项目已构建并运行 但我的主视图控制器似乎没有加载其视图 那就是viewDidLoad 方法未被调用 我正在使用 Xcode beta 8 0 b
  • 如何多次从 NSHTTPCookieStorage 中清除 cookie?

    我的桌面应用程序连接到 Google App Engine 上托管的网络应用程序 一旦通过身份验证 它就会获得一个 authtoken cookie 并为所有未来的请求传递该 cookie 这一切都有效 但现在我想添加 退出 我尝试像这样实
  • NSTableView 在编辑时点击 Tab 键可从行跳转到行

    我有一个 NSTableView 编辑时 如果我点击选项卡 它会自动跳到下一列 这太棒了 但是当我编辑最后一列中的字段并点击选项卡时 我希望焦点跳转到下一行的第一列 有什么建议么 感谢 Michael 提供的起始代码 它非常接近最终的工作结
  • 强制 const 存储返回的值 value

    这就是我想要实现的目标 struct test const test returnconst return test test returnnonconst return test int main test t1 returnnoncon
  • 向量和常量

    考虑一下这个 void f vector
  • 如何显示从 xib 加载的工作表? (MacOSx)

    我有一个 xib 文件 其中只有一个 NSPanel 我试图将此面板显示为模式表 带有beginSheet modalForWindow modalDelegate didEndSelector contextInfo 该 xib 文件的所
  • 如何判断相机是否正在被其他进程使用?

    在 OS X 中 如何判断摄像头或麦克风是否正在被其他应用程序或进程使用 除非其他应用程序锁定了设备 否则以下操作似乎不起作用 NSArray devices AVCaptureDevice devices for AVCaptureDev
  • 没有编辑菜单的对话框中的 Cocoa 键盘快捷键

    我有一个LSUIElement显示菜单栏状态项的应用程序 应用程序可以显示包含文本字段的对话窗口 如果用户右键单击 按住 Control 键单击文本字段 则会出现一个菜单 允许剪切 复制 粘贴等 但是 标准 Command X Comman
  • 当日期改变时 NSNotification?

    WebKit 的 WebHistory API 按日期分隔其项目 因此 当日期发生变化时 我需要重新分配任何 昨天 和 或 早些时候 今天 或 明天 标签 有 NSNotification 吗 或者我必须依赖 NSTimer 还是 perf
  • 如何让程序在登录时自动启动?

    如何设置菜单栏应用程序在登录时自动启动 我希望这是默认的 我可以简单地通过在 info plist 中添加一个 bool 来做到这一点吗 此解决方案仅适用于非沙盒应用程序 LSSharedFile此解决方案中使用的功能仅适用于非沙盒应用程序
  • 从选定的文件夹中获取大小 >100MB 的文件列表及其路径目标 c

    我想获取我的 mac 系统的所有文件及其路径和大小的列表 由此 我只想过滤那些文件大小超过 100 MB 的文件 我使用下面的代码获取了系统的大小 NSError error NSFileManager fileManager NSFile
  • 用xCode制作图表[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 您好 我需要绘制一些数组来分析信号 我有一个可可项目正在进行 谁能告诉我在哪里可以找到简化这项任务的工具 基本上我想像在图形计算器上一样显
  • 如何使用 Cocoa Autolayout 根据优先级调整两个子视图的大小?

    我正在 Cocoa 中使用自动布局 有些事情对我来说并不清楚 我在一个窗口上有 2 个视图 每个视图的宽度是父窗口宽度的1 2 View1 View2 如果我调整窗口大小 我希望首先调整 View2 的大小 View1 View2 当 Vi
  • 用Red语言制作GUI对象

    我有一个小面板的以下简单代码 view t text label f field button Click here t text f text 但我必须制作其中两个并将它们放在一个窗户上 我想创建单个对象类并从中创建 2 个对象 我看到可

随机推荐