当应用程序在Simulator中运行时,它可以正常运行,但是在Storyboard中看不到预览,为什么?
看不到自定义视图背景颜色,将UIButton对象拖动到自定义视图时看不到实际位置(x,y)及其背景颜色。
在Android Studio中,当您在layout.xml文件中添加对象(自定义视图)时,您可以自动查看预览,是否可以在Xcode中执行相同的操作?
答案 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)
您正在修改CustomView
中CustomSetup()
的子视图,该视图是从初始化程序调用的。在这种情况下,您的视图没有任何按钮子视图,因为只有>>初始化视图后才能添加。
您需要将CustomSetup()
的呼叫推迟到以后的某个时间点,awakeFromNib()
应该适用于您的情况。
更好的是,完全删除CustomSetup()
,然后在Interface Builder中设置UIButton
样式。如果没有复杂性,您将得到相同的结果。