为什么无法在故事板中看到我的自定义视图的预览?

时间:2017-02-19 13:35:04

标签: ios swift xcode

当应用程序在Simulator中运行时,它可以正常运行,但是在Storyboard中看不到预览,为什么?

Swift code:

Simulator and Storyboard:

看不到自定义视图背景颜色,将UIButton对象拖动到自定义视图时看不到实际位置(x,y)及其背景颜色。

在Android Studio中,当您在layout.xml文件中添加对象(自定义视图)时,您可以自动查看预览,是否可以在Xcode中执行相同的操作?

3 个答案:

答案 0 :(得分:3)

<强> TL; DR;调用prepareForInterfaceBuilder

// Call The Custom Setup Here
override func prepareForInterfaceBuilder() {
    setupView()
}

调用 layoutSubviews 也可以,但在运行时调用倍数, prepareForInterfaceBuilder 仅针对可设计变更调用,仅用于此目的。

长码:

@IBDesignable
class CustomView: UIView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupView()
    }

    override func prepareForInterfaceBuilder() {
        setupView()
    }

    func InitChildPosition() {
        var i = 1
        for _view in self.subviews {
            if _view is UIButton {
                _view.center.x = (_view.bounds.width / 2)
                _view.center.y = (_view.bounds.height / 2)
            }

            if _view is UIButton && i == 2 {
                _view.center.x = self.bounds.width - (_view.bounds.width / 2)
                _view.center.y = self.bounds.height - (_view.bounds.height / 2)
                _view.backgroundColor = UIColor.darkGray
            }
            i += 1
        }
    }

    func setupView() {
        self.backgroundColor = UIColor.black

        InitChildPosition()
    }
}

答案 1 :(得分:0)

CustomSetup()

致电init(frame:)

修改

Interface Builder使用init(frame:)在故事板中创建和定位视图。

答案 2 :(得分:0)

您正在修改CustomViewCustomSetup()的子视图,该视图是从初始化程序调用的。在这种情况下,您的视图没有任何按钮子视图,因为只有>初始化视图后才能添加

您需要将CustomSetup()的呼叫推迟到以后的某个时间点,awakeFromNib()应该适用于您的情况。

更好的是,完全删除CustomSetup(),然后在Interface Builder中设置UIButton样式。如果没有复杂性,您将得到相同的结果。