たくさんの質問があります:
- 追加するビューの下部にあるように UIView を配置するにはどうすればよいですか?
- サブビューをビューに追加して、スーパービューの隅に小さなギャップを設けて配置するにはどうすればよいですか (何かを閉じるために 'x' 十字記号が必要な場合のように)
- 簡単な UIView の配置 (および回転) のためのユーティリティ クラスですか?
参考文献、オープンソースのチュートリアルなどは大歓迎です!
(a)UIViewを、追加するビューの下部に配置する方法を教えてください。
button
OK、ビューの下部にサブビューとして配置したいとします。サブビューの高さからボタンの高さを差し引くことによって、サブビューのform
を計算します。origin.y
button
form
CGRect buttonFrame = button.frame;
buttonFrame.origin.y = form.bounds.size.height - buttonFrame.size.height;
button.frame = buttonFrame;
[form addSubview:button];
原点の水平位置も変更できます。左下に置きたいform
?
buttonFrame.origin.x = 0;
form
または?の右端に
buttonFrame.origin.x = form.bounds.size.width - buttonFrame.size.width;
または?の真ん中(水平方向)にform
?
buttonFrame.origin.x = (form.bounds.size.width - buttonFrame.size.width) / 2;
またはCGRectGetMidX
(CGGeometryユーティリティメソッドにある)を使用する別の方法:
buttonFrame.origin.x = CGRectGetMidX(form.bounds) - buttonFrame.size.width/2;
自動サイズ変更は、親ビューのサイズが変更されたときにフレームを調整するハンドルです。ただし、それでも最初に配置する必要があります。
int xOffset = 20;
int yOffset = 20;
CGRect BottomRight_NewFrame = CGRectMake((superview.frame.size.width - subview.frame.size.width-xOffset), (superview.frame.size.height - subview.frame.size.height-yOffset), subview.frame.size.width, subview.frame.size.height);
subview.frame = BottomFrame;
自動レイアウトは、ビューを配置し、スーパービューのサイズが変更された場合にそれらの位置を維持するのに役立ちます。スーパービューが変更されない場合は、制約をいじる必要はありません。サブビューの位置を適切に設定するだけです。
viewB
ビューをビューに追加する場合viewA
:
a)下端が:viewB
の下端に対応するように配置します。viewA
viewB.frame.origin.y = viewA.bounds.size.height - viewB.bounds.size.height;
b)どちらのコーナーかは言わないが、それはただ数学をすることの問題だ。たとえば、の右上隅はviewA
viewA{viewA.bounds.size.x, 0}
の座標系にあります。そこに配置する場合はviewB
、原点を次のように設定します。
{viewA.bounds.size.x-viewB.bounds.size.x, 0}
マージンを追加したい場合は、それを計算に追加できます。
int margin = 10;
{viewA.bounds.size.x-viewB.bounds.size.x-margin, margin}
d)NSLayoutConstraintを使用して、プログラムで自動レイアウトシステムの制約にアクセスします。優れたビジュアルフォーマット言語があるので、質問(a)に対して次の制約を設定できますviewA
。
V:|-[viewB]-0-|
はV
垂直方向で作業していることを意味し、はスーパービュー|
のエッジ(のおかげで上と下)を表し、スーパービューとその下の間の距離は0でなければならないことを意味します。V
viewA
0
viewB
フレームを設定するだけで十分簡単です。例:(テストされていないコード)
subview.frame = CGRectMake((superview.frame.origin.x - subview.frame.origin.size.width/2)-20, (superview.view.frame.origin.y - subview.frame.origin.size.height/2)-20, subview.view.frame.size.width, subview.view.frame.size.height);
これをたくさん行う場合は、ユーティリティクラスまたはメソッドを作成します。
これを実現するには、iOS 6 の新しい Autolayout 機能または Interface Builder の古い Struts & Springs を使用できます。
このチュートリアルでは両方について説明しています: http://msmvps.com/blogs/kevinmcneish/archive/2012/12/10/tutorial-ios-6-auto-layout-versus-springs-and-struts.aspx
または、自動サイズ変更マスクをプログラムで設定できます。UIView autoresizingMask - Interface Builder to Code - プログラムでストラットとスプリングを作成 - Swift または Objective-C