に がUIImageView
埋め込まれていUIView
ます。アプリ全体で を使用していますが、 を削除しAutoLayout
たいです。を削除することはできません。特定のオブジェクトに対してそれらを無効にし、それらをゼロに設定する方法はありますか?constraints
UIImageView
Xcode
constraints
6 に答える
ここには 2 つの異なる問題があります。
- Xcode を使用して制約なしで UIImageView をセットアップする方法
- レイアウトが制約によって処理されるときに UIImageView をパンおよび/またはサイズ変更できるようにする方法。
(1)に関しては、jturtonが正しいです。Xcode 内で自動レイアウトを有効にしている限り、Xcode は、ビューのサイズと位置を一意に決定するのに十分な制約があることを保証/要求します。
Xcode で (レイアウト インスペクタに青色で表示される「ユーザー制約」を使用して) 十分な制約を手動で指定していない場合、Xcode は、推測する新しい制約 (紫色で表示される) を、決定するのに十分な制約が存在するまで追加します。レイアウト。
UIImageView に制約がない場合、そのレイアウトは決定されないため、Xcode で設定することはできません。これを修正するには、Xcode を使用して、削除するすべての制約に IBOutlets を設定し、UIView の awakeFromNib: または UIViewController の viewDidLoad: で、removeConstraints: を呼び出して手動で制約を削除します。
ただし、UIImageView のレイアウトは十分に決定されていません。したがって、この時点で、UIImageView の移動とサイズ変更を可能にする新しい制約を手動で追加する必要があります。これにより、質問 (2) が生じます。
(2)、制約によってレイアウトが決定されるビューをサイズ変更および移動する方法については、ピンチ アンド パン ジェスチャを検出するためにジェスチャ レコグナイザを通常どおりセットアップすることで解決できますが、setFrame: を呼び出すジェスチャ レコグナイザの代わりに、ビューを変更するには、 UIImageView のフレームを決定する NSLayoutConstraintのパラメーターを変更してconstant
から、layoutIfNeeded: を呼び出す必要があります。これにより、レイアウト システムは変更された制約を新しいフレームに即座に変換します。
たとえば、使い慣れた setFrame: 呼び出しに非常によく似た一連のレイアウト制約を使用して UIImageView を操作するとします。その場合、Xcode によって設定された制約を削除した後、幅、高さ、およびスーパービューの上部と左側からのスペースを指定する制約をビューに追加できます。次に、パン ジェスチャ レコグナイザーのアクション ハンドラーは、ペーサー ジェスチャ レコグナイザーの定数パラメーターを更新するだけで、ピンチ ジェスチャ レコグナイザーは、高さと幅の制約の定数パラメーターを更新するだけです。
(2) を行うもう 1 つの方法は、内部は同じですが、実際にはより簡単な方法で、 を設定することtranslatesAutoresizingMaskIntoConstraints=YES
です。これにより、2 つのことが行われます。ビューの autoresizingMask に基づいて、自動レイアウト システムがビューのスーパービューに制約を自動的に生成します。2番目–決定的に!– レイアウト システムが自動的に setFrame: の呼び出しをこれらの制約の変更に変換します。
制約を設定することはできません。すべてのビューのサイズと位置を明確に設定するには、十分な制約を設定する必要があります
Autolayoutを使用してレイアウトされたサイズ変更可能なビューを作成できます。
たとえば、あなたの場合、配置の制約を作成できます。たとえば、画像ビューの中心を水平および垂直にスーパービューの中心に固定します。
水平方向と垂直方向のサイズ制限を作成することもできます。これを行う方法については、こちらの回答を参照してください。これら 2 つの制約へのアウトレットを作成します (インターフェイス ビルダーを使用している場合)。高さと幅を特定の数値に制限したり、乗数を使用して固定の縦横比を作成したりできます。
ピンチ ジェスチャに応答して.constant
、2 つのサイズ制約のプロパティを調整し、 を呼び出すことができますsetNeedsLayout
。これにより、画像ビューのサイズが変更され、中心が固定されたままになります。
上記の固定縦横比の提案を行う場合、制約を使用してビューのサイズを変更することは、実際にはフレームを設定するよりもはるかに簡単です。