web-dev-qa-db-ja.com

自動レイアウトでプログラムでフレームを変更する

Autolayoutを使用したUITableViewがあり、画面の下部にGADBannerViewが表示されたら高さを下げる必要があります。

残念ながら、自動レイアウトではフレームを変更することはできません。解決策は、自動レイアウトを削除し、フレームを手動で設定することです。これは非常に危険です。すべてのアプリが3.5 'および4.0'ディスプレイで正常に動作し、自動レイアウトを削除すると、新しいテストフェーズとより多くの作業が必要になるためです。

自動レイアウトが有効になっていてもフレームを変更する方法はありますか?

42
Fry

ボトムレイアウトに対するUITableView制約を0に設定し、IBOutletを作成します。 GADBannerViewの高さを40にしましょう。outlet.constant = 40;IBOutletを作成し、その値を変更する方法の詳細については、 this または this を参照してください。

編集:たとえば、これらの簡単な手順に従ってください(これは受け入れられている答えなので、例を挙げる価値があると思います。この例では@manujmv)

  1. インターフェイスでビューの高さの制約を作成します。

  2. 次に、この制約のクラスにIBOutletオブジェクトを追加します。例えば:

    @property(弱い、非アトミック)IBOutlet NSLayoutConstraint * heightConstraint;

接続パネルでこのオブジェクトを接続します。

  1. その後、必要に応じてこの制約の値を変更します

    self.heightConstraint.constant = 40;

64
Bharat

ビューのフレームを変更するのではなく、自動レイアウトを使用して高さの制約を追加し、この制約の値を減らします。以下の手順を実行します。

  1. インターフェースでビューの高さコンスターを作成します。
  2. 次に、この制約のクラスにIBOutletオブジェクトを追加します。例えば、

     @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
    

    接続パネルでこのオブジェクトを接続します。

  3. その後、必要に応じてこの制約の値を変更します

     self.heightConstraint.constant = 40;
    
41
manujmv

もう1つ、制約を変更したら[self.view layoutIfNeeded];メソッドを呼び出す必要があります。

楽しい :)

7
RJ168

あなたはそのような制約を見つけることができます

extension UIView {
    var heightConstaint: NSLayoutConstraint? {
        get {
            for constraint: NSLayoutConstraint in constraints {
                if constraint.firstAttribute == .height {
                    if constraint.relation == .equal {
                        return constraint
                    }
                }
            }
            return nil
        }

        set{
            setNeedsLayout()
        }
    }
}
1
AshvinGudaliya