首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么不能在故事板中看到我的自定义视图的预览?

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

Stack Overflow用户
提问于 2017-02-19 05:35:03
回答 3查看 2.9K关注 0票数 3

当应用程序在模拟器中运行时,它可以工作,但是在Storyboard中看不到预览,为什么?

Swift代码:

模拟器和故事板:

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-19 07:00:37

TL;DR;Call in prepareForInterfaceBuilder

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Call The Custom Setup Here
override func prepareForInterfaceBuilder() {
    setupView()
}

layoutSubviews中调用也是有效的,但在运行时被称为倍数次数,prepareForInterfaceBuilder仅用于可设计的更改,并且仅用于此目的。

长代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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()
    }
}
票数 4
EN

Stack Overflow用户

发布于 2017-02-19 05:49:55

CustomSetup() init(frame:)呼叫您的

编辑

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

票数 0
EN

Stack Overflow用户

发布于 2017-02-19 06:36:00

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

您需要将对CustomSetup()的调用推迟到稍后,在您的情况下,awakeFromNib()应该可以工作。

更好的是,完全删除CustomSetup(),只需在Interface中设置UIButton的样式。您将得到相同的结果,而不需要所有的复杂性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42327855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文