55

私はグーグルで検索しましたが、答えが見つかりません。だから私は尋ねる必要があります。ホーム画面は1つです。ユーザーがログインすると、以下のような 1 つのビューが表示されます。ユーザーがログアウトして ここに画像の説明を入力 ホームページにアクセスすると、レイアウトの上に表示されますが、中央のボックス レイアウトは表示されません。そのレイアウトを非表示に設定すると、次のように表示されるようになりました。 ここに画像の説明を入力

3番目のレイアウトを少し上に移動して、空白を削除したい..

ストーリーボードを使用して制約を追加しました。ここで、プログラミングから制約を削除し、レイアウトを以下の最初のレイアウトに設定する 1 つの制約を追加する必要があります。

4

10 に答える 10

50

@Henit が述べたように、制約に対して IBOutlet を設定することもできます。

例えば、

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

したがって、次のようにこの制約を削除できます。

[myView removeConstraint: viewHeight];

または、ビューに関連するすべて/複数の制約を削除する場合は、

[myView removeConstraints: constraintsArrayHere]; // custom array of constraints references
[myView removeConstraints: [myView constraints]]; //all constraints

その後、addConstraintまたはaddConstraintsメソッドを使用して同じ方法で新しい制約を追加できます。

詳細については、こちらの Apple ドキュメントを参照してください。

お役に立てれば。

于 2014-12-31T13:08:28.587 に答える
34

removeConstraintsは将来廃止される予定です。

代わりに以下を使用できます

viewHeight.active = NO;
于 2016-06-22T09:42:29.033 に答える
15

スウィフト4では

@IBOutlet weak var viewHeight: NSLayoutConstraint!
viewHeight.isActive = false    

ハッピーコーディング:)

于 2018-09-21T15:39:50.750 に答える
12

ユーザーがログアウトしたときに非表示にするビューの高さの制約の IBOutlet を取得します。

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

NSLayoutConstraintクラスには 1 つのプロパティ定数があります。ユーザーがログイン/ログアウトするときに設定する必要があります。

viewHeight.constant = isLoggedIn ? 30.0 : 0.0;

お役に立てれば..

于 2014-12-31T12:33:27.360 に答える
2

他の方法でもできます。3 番目のレイアウトと 1 番目のレイアウトの間に 30 になる垂直方向の間隔の制約を追加します。次に、コントローラーで制約への参照を追加します。

self.verticalSpacingFromThirdToFirstConstraint.constant = isLoggedIn ? 30.0 : 0.0

PS: この場合、中央のビューに高さの制約を追加しないでください。末尾、先頭、上 (最初のレイアウト)、下 (3 番目のレイアウト) の 4 つを追加するだけです。

于 2016-03-05T03:34:17.730 に答える
1

非表示にするビューの高さ制限を追加できます。そしてNSlayoutHeightcontraint、viewcontroller.h ファイルにその高さ制約のアウトレットを追加します。その後heightConstrain、viewcontroller.m ファイル内の必要な場所でそのアウトレットを呼び出すことができます。これを非表示にする場所に次のコードを追加しますUIview

_heightconstrainOutlet.constant=0;

その高さをゼロにします。したがって、底面図もその領域をカバーします。ボトムビューに高さの制約とコンテナの制約に対する下部のスペースがあった場合は? 要件としてそれらのいずれかを削除するだけです。ありがとう

于 2016-06-24T09:43:30.327 に答える
1

インターフェイスビルダーから制約にアクセスできない場合は、次のように制約を更新できます。

    let topConstraint = view.constraints.first(where: { $0.firstAttribute == .top })
    topConstraint?.constant = 20

「view」は、その制約を更新しようとしているビューです。問題のビューに複数のトップ制約が関連付けられている可能性があるという点で、このアプローチにはいくつかの欠点があります。

于 2020-02-12T09:23:20.013 に答える