Autolayoutを使用したUITableView
があり、画面の下部にGADBannerView
が表示されたら高さを下げる必要があります。
残念ながら、自動レイアウトではフレームを変更することはできません。解決策は、自動レイアウトを削除し、フレームを手動で設定することです。これは非常に危険です。すべてのアプリが3.5 'および4.0'ディスプレイで正常に動作し、自動レイアウトを削除すると、新しいテストフェーズとより多くの作業が必要になるためです。
自動レイアウトが有効になっていてもフレームを変更する方法はありますか?
ボトムレイアウトに対するUITableView
制約を0に設定し、IBOutlet
を作成します。 GADBannerView
の高さを40にしましょう。outlet.constant = 40;
IBOutlet
を作成し、その値を変更する方法の詳細については、 this または this を参照してください。
編集:たとえば、これらの簡単な手順に従ってください(これは受け入れられている答えなので、例を挙げる価値があると思います。この例では@manujmv)
インターフェイスでビューの高さの制約を作成します。
次に、この制約のクラスにIBOutletオブジェクトを追加します。例えば:
@property(弱い、非アトミック)IBOutlet NSLayoutConstraint * heightConstraint;
接続パネルでこのオブジェクトを接続します。
その後、必要に応じてこの制約の値を変更します
self.heightConstraint.constant = 40;
ビューのフレームを変更するのではなく、自動レイアウトを使用して高さの制約を追加し、この制約の値を減らします。以下の手順を実行します。
次に、この制約のクラスにIBOutletオブジェクトを追加します。例えば、
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
接続パネルでこのオブジェクトを接続します。
その後、必要に応じてこの制約の値を変更します
self.heightConstraint.constant = 40;
もう1つ、制約を変更したら[self.view layoutIfNeeded];
メソッドを呼び出す必要があります。
楽しい :)
あなたはそのような制約を見つけることができます
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()
}
}
}