これはまだGoogleで高く評価されています。以下は、swift の更新された例です。
このdidLoad
関数を使用すると、すべてのカスタム初期化コードを配置できます。他の人が述べたように、didLoad
プログラムでビューが作成されたinit(frame:)
とき、またはXIBデシリアライザーがXIBテンプレートをビューにマージしたときに呼び出されますinit(coder:)
余談: layoutSubviews
andupdateConstraints
は、ほとんどのビューで複数回呼び出されます。これは、ビューの境界が変更されたときの高度なマルチパス レイアウトと調整を目的としています。個人的には、可能な限りマルチパス レイアウトを避けています。CPU サイクルを消費し、すべてが頭痛の種になるからです。さらに、イニシャライザを無効にすることはめったにないので、イニシャライザ自体に制約コードを入れています。
import UIKit
class MyView: UIView {
//-----------------------------------------------------------------------------------------------------
//Constructors, Initializers, and UIView lifecycle
//-----------------------------------------------------------------------------------------------------
override init(frame: CGRect) {
super.init(frame: frame)
didLoad()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
didLoad()
}
convenience init() {
self.init(frame: CGRectZero)
}
func didLoad() {
//Place your initialization code here
//I actually create & place constraints in here, instead of in
//updateConstraints
}
override func layoutSubviews() {
super.layoutSubviews()
//Custom manually positioning layout goes here (auto-layout pass has already run first pass)
}
override func updateConstraints() {
super.updateConstraints()
//Disable this if you are adding constraints manually
//or you're going to have a 'bad time'
//self.translatesAutoresizingMaskIntoConstraints = false
//Add custom constraint code here
}
}