微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift4 – Xcode 9.2和Swift 4中的AppKit是否破坏了IBDesignable?

大多数问题以及与此相关的答案均基于 XcodeSwift的旧版本.此外,90%的问题与UIKit和绘制自定义控件有关.

我正在添加一个标准按钮,该按钮位于自定义控件内部,用IBDesignable修饰.

import Cocoa

@IBDesignable public class ButtonPresetView: NSView {
    public override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        initialControlSetup()
    }

    public required init?(coder decoder: NSCoder) {
        super.init(coder: decoder)
        initialControlSetup()
    }

    private func initialControlSetup() {
        let button = NSButton(title: "Hello",target: nil,action: nil)
        button.translatesAutoresizingMaskIntoConstraints = false
        addSubview(button)

        // Configure button
        centerXAnchor.constraint(equalTo: button.centerXAnchor).isActive = true
        centerYAnchor.constraint(equalTo: button.centerYAnchor).isActive = true
    }
}

我向应用程序添加一个自定义视图,并将Identity Inspector中的class属性设置为我的自定义类(ButtonPresetView).

它应该显示以画布为中心的按钮,但画布为空白.
不确定很多人会这样使用它,但它在Xcode 8.3中使用Swift 3非常有效.

还有其他人有这个问题吗?

解决方法

通过在initialControlSetup函数的顶部添加以下两行,我能够在最新的Xcode中使用它:

wantsLayer = true
canDrawSubviewsIntoLayer = true

我认为这基本上告诉NSView以与iOS工作方式更相似的方式呈现.如果你正如你所说的那样在Xcode 8.3中有效,Apple可能会在Xcode 9中引入这种回归而没有意识到这一点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐