发布于 2017-02-19 07:00:37
TL;DR;Call in 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()
}
}
发布于 2017-02-19 05:49:55
从CustomSetup()
init(frame:)
呼叫您的
编辑
Interface使用init(frame:)
在故事板中创建视图并定位视图。
发布于 2017-02-19 06:36:00
您正在修改CustomView
在CustomSetup()
中的子视图,这是从初始化器调用的。在这种情况下,您的视图没有任何按钮子视图,因为只有在视图初始化后才能添加子视图。
您需要将对CustomSetup()
的调用推迟到稍后,在您的情况下,awakeFromNib()
应该可以工作。
更好的是,完全删除CustomSetup()
,只需在Interface中设置UIButton
的样式。您将得到相同的结果,而不需要所有的复杂性。
https://stackoverflow.com/questions/42327855
复制相似问题