0

我有一个从未见过iOS但在macOS Swift开发中出现的奇怪问题。

我有一个方法NSButton添加addSubview到自定义NSView. 该按钮具有目标功能。此按钮添加到customView. 如果我将它添加到全局“视图”中直接工作正常。

知道为什么会这样吗?

//Infos View
self.infosView.wantsLayer = true
self.infosView.layer?.backgroundColor = NSColor.darkGray.cgColor

self.view.addSubview(self.infosView)

 //TestButton
let myButtonRect = CGRect(x: 100, y: 100, width: 200, height: 200)
self.testButton = NSButton.init(frame: myButtonRect)

// !!!!
// this line doesn't work
// !!!!
self.infosView.addSubview(testButton)

// !!!!
// but this line works fine
// !!!!
self.view.addSubview(testButton)

self.testButton.target = self
self.testButton.action = #selector(ViewController.printSomething)

更新: testButton 后不可点击CATransform

self.infosView.layer?.transform = CATransform3DMakeTranslation(500, 0, 0)

之后就不行了。。

4

1 回答 1

0

我在这里粘贴这个问题的答案。问题是 NSView 的限制。

1- 创建一个 NSLayoutConstraints() 变量

2- 设置 NSView 的约束

self.infosView.translatesAutoresizingMaskIntoConstraints = false
        self.leadingConstraint = self.infosView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: -500)
        self.leadingConstraint.isActive = true
        self.infosView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
        self.infosView.widthAnchor.constraint(equalTo: self.view.widthAnchor, multiplier: 0, constant: 500).isActive = true
        self.infosView.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 0, constant: (NSScreen.main?.frame.height)!).isActive = true

3 - 然后当我想更新包含 NSButton 的 NSView

self.leadingConstraint.constant = 0

runAnimation(duration: 0.5, {
    self.testButton.superview?.layoutSubtreeIfNeeded()

    self.infosViewOpened = true

})
于 2018-07-19T09:04:20.290 回答