2016-10-29 4 views
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回設定しています。これらの警告を避けるために、初期制約を無効にする方法はありますか?どんな助けでも大歓迎です。

答えて

0

新しい制約を作成しないでください。クラスのソースファイルに変更したいコンストレイントからコントロールをドラッグしてコンストレイントへのアウトレットを作成します。

制約の定数値を変更して金額を変更することができます。

+0

ストーリーボードを使用していません。コードを使ってこれを複製する方法はありますか? –

+0

確かに。意味のある名前を使用して、インスタンス変数を設定したときに制約に保持します。 (あなたが投稿したコードは、それらを保存しない "set and forget"構文で制約を作成します。代わりに、 'baseView.stack.leadingAnchor.constraint(equalTo:leadingAnchor)'のような行の結果をインスタンスに代入します変数 –

+0

次に、2行目のコードでisActiveをtrueに設定します。 –

関連する問題