【发布时间】:2017-08-17 11:14:12
【问题描述】:
我一直在 macOS 应用程序中使用 NSTouchBar 并想出了以下代码:
func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
switch identifier {
case NSTouchBarItemIdentifier.testItemIdentifier:
let viewObject = NSView()
for i in 1...10 {
let imageWidth: CGFloat = 20;
let imageHeight: CGFloat = 20;
let imagePositionTop: CGFloat = 0
let imagePositionLeft: CGFloat = imageWidth * (CGFloat(i) - 1)
let imageObject = NSImage(named: "test_image")!
imageObject.size = NSSize(width: 20, height: 20)
let imageView = NSImageView(image: imageObject)
let constraintObject1 = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: viewObject, attribute: NSLayoutAttribute.top, multiplier: 1, constant: imagePositionTop)
let constraintObject2 = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.left, relatedBy: NSLayoutRelation.equal, toItem: viewObject, attribute: NSLayoutAttribute.left, multiplier: 1, constant: imagePositionLeft)
let constraintObject3 = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: imageView, attribute: NSLayoutAttribute.width, multiplier: 0, constant: imageWidth)
let constraintObject4 = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: imageView, attribute: NSLayoutAttribute.height, multiplier: 0, constant: imageHeight)
imageView.addConstraint(constraintObject1)
imageView.addConstraint(constraintObject2)
imageView.addConstraint(constraintObject3)
imageView.addConstraint(constraintObject4)
viewObject.addSubview(imageView)
}
let customViewItem = NSCustomTouchBarItem(identifier: identifier)
customViewItem.view = viewObject
return customViewItem
default:
return nil
}
}
运行应用程序时,我得到一个EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。造成这种情况的原因似乎是对addConstraint 的调用。我以前从未手动创建过约束,并且对 swift 语言相对较新。
非常感谢任何帮助。
【问题讨论】:
标签: swift macos swift3 autolayout nslayoutconstraint