我有一個簡單的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-