2017-12-02 3 views
0

一般的な使用例は、特定のサイズクラスのビューを追加する必要がある場合です。 たとえば、wRegularです。特定のサイズクラスのビューを追加する場所(プログラムによって)

余分なスペースを利用するために余分なラベルを追加したい場合があります。

私の質問では、このラベルをどこに追加すればよいですか?具体的には、このラベルを以下の方法でビューに追加する必要がありますか?私のような何かを考えていた

traitCollectionDidChange


ありインターフェイスビルダーでこれを行う方法の例のトンのようですが、私はそうではなかったので、

// sudo code 
traitCollectionDidChange{ 

    if (wR){ 
     create special view if special view is nil 
     self.view.addChildView(special View) 
     set constraints for wRegular size class 

    } else{ 
     self.view.removeChildView(special View) 
     deactivate special view constraints (if not nil) 
     set constraints for ... size class 

    } 
} 

余分なビューを実際にどこで初期化するかを確認してください。

traitCollectionDidChangeに特殊なビューを初期化しました。特殊なビューを必要としないデバイスがあるためです。

答えて

0

毎回ビューを追加したり削除したりしないでください。一度だけ追加してください。次のコードのように、traitCollectionDidChange内の特性に基づいて制約をアクティブ化または非アクティブ化するだけです。

if self.traitCollection.horizontalSizeClass == .compact { 
    NSLayoutConstraint.activate(horConstraintsArray) 
    NSLayoutConstraint.deactivate(vertConstraintsArray) 
    } else { 
    NSLayoutConstraint.activate(vertConstraintsArray) 
    NSLayoutConstraint.deactivate(horConstraintsArray) 
    } 

また、else部分に書いたコードに従って、ビューが削除されると、制約は自動的に削除されます。デバイスを回転させると、ビューを作成して追加するたびに制約を追加するのは、コストパフォーマンスの高いタスクパフォ​​ーマンスです。

+0

Regular widthからCompactに移行するとどうなりますか?この場合、追加するビューは必要ありません。その場合、削除する必要はありませんか?注:私は毎回ビューを作成せず、メインビューから削除するだけです。 – 3366784

+0

簡単な例はApplesの電卓アプリです。ビューを回転すると、新しいボタンの追加方法が表示されます。 – 3366784

関連する問題