मैं नामित और आवश्यक के लिए एक सामान्य init बनाता हूं। सुविधा के लिए, मैं init(frame:)
शून्य के फ्रेम के साथ प्रतिनिधि हूं ।
शून्य फ्रेम होने में कोई समस्या नहीं है क्योंकि आम तौर पर दृश्य ViewController के दृश्य के अंदर होता है; जब आपके पर्यवेक्षी कॉल करते हैं तो आपके कस्टम दृश्य को इसके सब-वेवेज़ को लेआउट करने का एक अच्छा, सुरक्षित मौका मिलेगाlayoutSubviews()
याupdateConstraints()
। इन दोनों कार्यों को सिस्टम द्वारा पुनरावर्ती रूप से पूरे पदानुक्रम में कहा जाता है। आप updateContstraints()
या तो उपयोग कर सकते हैं या layoutSubviews()
। updateContstraints()
पहले कहा जाता है, फिर layoutSubviews()
। में updateConstraints()
मेकअप यकीन है कि सुपर कॉल करने के लिए पिछले । में layoutSubviews()
, पहले सुपर बुलाओ ।
यहाँ मैं क्या कर रहा हूँ:
@IBDesignable
class MyView: UIView {
convenience init(args: Whatever) {
self.init(frame: CGRect.zero)
//assign custom vars
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
commonInit()
}
private func commonInit() {
//custom initialization
}
override func updateConstraints() {
//set subview constraints here
super.updateConstraints()
}
override func layoutSubviews() {
super.layoutSubviews()
//manually set subview frames here
}
}
var
। लेकिन स्विफ्ट में डिफ़ॉल्ट सबसे अच्छा अभ्यास चर घोषित करना हैlet
जब तक कि उन्हें घोषित करने का कोई कारण नहीं हैvar
। ऊपर मेरे कोड उदाहरण में ऐसा करने का कोई कारण नहीं था, इसलिएlet
।