@IBDesignable
という単純なUIView
サブクラスがあります。 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-