加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:58:07 所属栏目:百科 来源:网络整理
导读:大多数问题以及与此相关的答案均基于 Xcode和 Swift的旧版本.此外,90%的问题与UIKit和绘制自定义控件有关. 我正在添加一个标准按钮,该按钮位于自定义控件内部,用IBDesignable修饰. import Cocoa@IBDesignable public class ButtonPresetView: NSView { publ
大多数问题以及与此相关的答案均基于 Xcode和 Swift的旧版本.此外,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中引入这种回归而没有意识到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读