swift - 对已被自定义 View 替换的 NSMenuItem 应用约束

标签 swift xcode macos cocoa

我在 Swift/Cocoa 中创建了一个主菜单,其中包含替换多个菜单项的自定义 View 。自定义 View 是从单独的 NSView class/xib 文件加载的。此自定义 View 内的约束包含一个通过 Interface Builder 居中的标签,相应地:

enter image description here

菜单项的替换已经完成,如下所示:

@IBOutlet weak var statusMenu: NSMenu!
@IBOutlet weak var tabviewRoom: tabviewMenuRoom!
@IBOutlet weak var stackScenes: NSStackView!
@IBOutlet weak var menuRoomsHeader: viewMenuHeaderRooms!

...

if let itemRoomsHeader = statusMenu.item(withIdentifier: "rooms_header") {
        menuRoomsHeader.title = "Rooms"
        itemRoomsHeader.view = menuRoomsHeader
        itemRoomsHeader.target = self
    }

但是,由于缺少对 View 的一些约束,菜单中的最终结果如下所示(NSView 未拉伸(stretch)到菜单项的宽度):

enter image description here

我想知道如何向菜单项添加约束以保持文本居中(=自定义 NSView 的宽度显示为红色,NSMenuItem 的宽度显示为绿色)。

最佳答案

确保您已为容器 View 禁用“将蒙版转换为约束”。然后,当您在 Interface Builder 中调整 View 大小时,检查布局的行为是否符合预期。

您还可以在运行时查看事件约束,方法是打开菜单,然后单击 Xcode 中的“调试 View 层次结构”并在调试导航器中选择 NSCarbonMenuWindow

关于swift - 对已被自定义 View 替换的 NSMenuItem 应用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126361/

相关文章:

ios - 计算属性还是存储属性?

swift - 尝试从不同的 Swift 类调用方法

c++ - 使用 Xcode 3.2.6 构建 10.7 Lion 应用程序 - 它们可以工作吗

ios - fatal error : to change segue

Mysql Mac OS X 如何在本地机器上不需要密码

ios - 无法访问 AppStore 连接

ios - 获取结果 Controller 委托(delegate)在 swift 1.2/xcode 6.3 更新后未调用

ios - Swift 将浮点值添加到 UISlider.value

ios - View 内从一个 VC 到另一个 VC 的自定义转换

c++ - 使用 Xcode 'sandbox' ed 应用程序启用声音