0
親クラスを作成しました。これは、アプリケーション全体で使用される2つの汎用プロパティを持つUIStackViewです。今親クラスに設定されている制約をオーバーライドする方法
class baseStackView:UIView {
var stack: UIStackView
init(_ coder: NSCoder? = nil) {
stack = UIStackView()
stack.axis = UILayoutConstraintAxis.vertical
stack.distribution = UIStackViewDistribution.fill
stack.spacing = 20
if let coder = coder {
super.init(coder: coder)!
} else {
super.init(frame: CGRect.zero)
}
addSubview(stackView)
}
}
override func didMoveToSuperview() {
super.didMoveToSuperview()
setupConstraints()
}
private func setupConstraints() {
translatesAutoresizingMaskIntoConstraints = false
stack.translatesAutoresizingMaskIntoConstraints = false
stack.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
stack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 32).isActive = true
stack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -32).isActive = true
}
、私は必要なビューのいずれかの外観に合わせて変更するstackViewの先頭と末尾のアンカーを変更する必要がある状況になってきました。
当然のことながら、当然のことながら、私は単に、子クラスの1つに後続の先行する制約を設定します。
var baseView: BaseStackView
baseView = BaseStackView()
baseView.stack.translatesAutoresizingMaskIntoConstraints = false
baseView.stack.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
baseView.stack.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
これは技術的に私の制約内で競合を引き起こすようですが、私はそれを2回設定しています。これらの警告を避けるために、初期制約を無効にする方法はありますか?どんな助けでも大歓迎です。
ストーリーボードを使用していません。コードを使ってこれを複製する方法はありますか? –
確かに。意味のある名前を使用して、インスタンス変数を設定したときに制約に保持します。 (あなたが投稿したコードは、それらを保存しない "set and forget"構文で制約を作成します。代わりに、 'baseView.stack.leadingAnchor.constraint(equalTo:leadingAnchor)'のような行の結果をインスタンスに代入します変数 –
次に、2行目のコードでisActiveをtrueに設定します。 –