2017-09-25 25 views
0

自動レイアウトで奇妙なバグがあります。制約を更新した後、ボタンが正しく自動レイアウトされない

私は同じビューでそれぞれスーパービューの50%の幅を持った2つのボタン(確認と削除)を並べて表示しています(テスト= trueの場合)削除ボタンは画面の幅をすべて使います。ここで

は私の自動レイアウトです:

enter image description here

確認ボタン:

enter image description here

[削除]ボタン:

enter image description here

のPr横幅はスーパービューの50%(1:2)です。今ここにviewWillAppearで何が起こって、私の呼び出しです:

if test { 
    self.confirmButtonWidthConstraint.constant = 0 
    self.deleteButtonWidthConstraint.constant = (self.deleteButton.superview?.frame.width)! 
} 

しかし、ここではそうした後の結果である:

enter image description here

そして、UIデバッガをチェックした後、私は、妙にこれをそれを見ることができます削除ボタンの幅は480になり、開始xは-160になりました。だから私はここで何が起こっているのか分かりません。助けてください!

enter image description here

+0

制約がAutolayout(ビューの幅など)によって決定されるデータを使用している場合は、正確なユースケースに応じて、viewDidLayoutSubviews()またはviewWillLayoutSubviews()で関連するコードを呼び出す必要があります。 –

+0

あなたの答えをありがとう。私はそれを試みたが、同じ結果を得ている。 – Someday

答えて

3

私は別の方法をお勧めしますか?

ボタンをスタックビュー(UIStackView)に埋め込み、ボタンを均等に塗りつぶすように設定します。

ボタンを消すには、button.isHidden = trueと設定します。スタックビューはレイアウトを適切に処理します。

+0

完璧に動作します!ありがとう – Someday

2

あなたは比例幅を設定しましたが、制約にconstantプロパティを更新しています。比例幅は乗算結果にconstantの値を加算するだけなので、望む結果につながる必要があります。

代わりに、制約のmultiplierプロパティを設定する必要があります。例:

if test { 
    self.confirmButtonWidthConstraint.multiplier = 0.0 
    self.deleteButtonWidthConstraint.multiplier = 1.0 
} 
+0

ああ、私の間違いは何だったか分かりました。私はJack Dawのソリューションを使用して終了しました。なぜなら、それは私にとってより自然なようですが、それは間違いありません。再度、感謝します ! – Someday

+0

はい、彼の解決策が好まれます。あなたがうまく働いてうれしい。ハッピーコーディング! – beyowulf

関連する問題