J'ai une simple sous-classe UIView
que j'ai créée @IBDesignable
. J'ai surchargé init frame
et init coder
. Mon code charge la description de la vue à partir d'un fichier .xib
. Une fois le fichier .xib
a été chargé, j'essaie de définir:view.frame n'est pas défini lorsque IBDesignable charge xib
view.clipsToBounds = true
view.layer.cornerRadius = frame.size.height/2
pour obtenir un « rectangle avec des côtés circulaires ».
Le problème est que frame.size.height = 0
à ce moment-là (après .xib
est chargé et mon affichage personnalisé dessiné pour la première fois par Interface Builder).
Y a-t-il une solution de contournement?
Ici, il est mon code:
@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
}
}
Merci, Luca-