我有一个简单的UIView
子类,我制作了@IBDesignable
。我过载了init frame
和init coder
。我的代码从.xib
文件加载视图说明。 的.xib
文件已加载后,我尝试设置:当IBDesignable加载xib时,未设置view.frame
view.clipsToBounds = true
view.layer.cornerRadius = frame.size.height/2
得到一个“矩形与圆形边”。
问题是当时frame.size.height = 0
(加载了.xib
后,我的自定义视图第一次被Interface Builder绘制)。
是否有解决方法?
这是我的代码:
@IBDesignable
class CustomUIVIew: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
private var view: UIView!
private let nibName = "CustomUIView"
private func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight]
addSubview(view)
setupView()
}
private func loadViewFromNib() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: nibName, bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
private func setupView() {
view.clipsToBounds = true
view.layer.cornerRadius = frame.size.height/2
}
}
谢谢Luca-