আমি মনোনীত এবং প্রয়োজনীয় জন্য একটি সাধারণ init তৈরি করি। সুবিধার জন্য আমি init(frame:)শূন্যের ফ্রেমটি দিয়েছি ।
শূন্য ফ্রেম থাকা কোনও সমস্যা নয় কারণ সাধারণত দর্শনটি একটি ভিউকন্ট্রোলারের দর্শনের অভ্যন্তরে থাকে; আপনার কাস্টম ভিউটি যখন তার তত্ত্বাবধানে কল আসে 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।