0

アプリに次の画面があります。

画面イメージ

現在、ポジショニングはすべてハードコードされており、見栄えがよくありません。これは、中央にいくつか\nの があり、テキストフィールドとボタンが慎重に配置された 1 つのテキストビューであり、ピクセルごとに実験してからハードコーディングされています。さらに、それはただ醜いです。

私は答えを見つけようとしてstackoverflowを見回しておりCGPoint、特定の を作成することについていくつか見つけましUITextPositionたが、残念ながら私は初心者すぎて答えを理解できません。

これらの位置を互いに相対的にソフトコーディングするエレガントな方法はありますか?

ご協力いただきありがとうございます。

編集: 配置コードは次のとおりです。

    if (!optOut) {
    optOut = [[UITextView alloc] initWithFrame:CGRectMake(20, 95, [[UIScreen mainScreen] bounds].size.width - 20, 200);
    optOut.backgroundColor=[UIColor clearColor];
    optOut.text = @"\n\n\nI hope to update the Haiku app periodically with new haiku, and, if you'll allow me, I'd like permission to include your haiku in future updates.  If you're okay with my doing so, please enter your name here so I can give you credit.\n\n\n\nIf you DON'T want your haiku included \nin future updates (which would make \nme sad), check this box.";
}
[self.view addSubview:optOut];
if (!checkboxButton) {
    checkboxButton = [UIButton buttonWithType:UIButtonTypeCustom];
    checkboxButton.frame = CGRectMake(236, 260, 44, 44);
    [self.view addSubview:checkboxButton];
}
[textView resignFirstResponder];
if (!nameField)
{
    nameField=[[UITextField alloc] initWithFrame:CGRectMake(40, 223, 240, 30)];
    [self.view addSubview:nameField];
}

optOutに配置する代わりに(20, 95, [[UIScreen mainScreen] bounds].size.width - 20, 200)、 (言う) に配置できるようにしたいと思い(20, [[UIScreen mainScreen] bounds].size.height/2-100, [[UIScreen mainScreen] bounds].size.width - 20, 200)ます。しかし、それを行うとoptOut、画面の高さに応じて の開始位置が移動する場合nameFieldcheckBoxも移動する必要があり、それらを に対して同じ位置に保つ方法がわかりませんoptOut

4

4 に答える 4

1

There are basically two ways you could do this. The first is to use auto-layout. I don't have any experience with auto-layout because it is an iOS 6+ feature, but it would probably be worth learning.

The way I usually do it would be be something like:

view1.frame = CGRectMake(20, 20, 200, 200);
view2.frame = CGRectOffset(view1.frame, 0, 20); // same as view1, offset down 20 points
view3.frame = CGRectMake(CGRectGetMinX(view2.frame), CGRectGetMaxY(view2.frame)+10, 80, 80);

These CGGeometry helper functions are quite useful. There are more obscure CGGeometry functions that are less useful, but can be great in some situations: http://nshipster.com/cggeometry/ For the full list, just check out the CGGeometry documentation

于 2013-01-06T02:49:48.210 に答える
1

個別に配置できるさまざまなコンポーネントに分割し、制約を使用してそれらを自動的に配置するか、コードで個別に移動する方がはるかに簡単です。また、UILabelユーザーがテキストを編集できるようにする必要がないため、静的テキストを表示することをお勧めします。このようなもの:

ここに画像の説明を入力

于 2013-01-06T01:40:50.863 に答える
1

最初に、その UITextView の 2 番目の部分 (すべてのリターンの後) を独自のオブジェクトに配置し、それ自体をビューに追加します。そして、あなたが持っているものでこれを行う最も簡単な方法は、要素にフレームの配置を直接尋ねることです。

checkboxButton.frame = CGRectMake(236, 260, 44, 44);

次のようなことを行います(構文が少しずれている場合は申し訳ありませんが、アイデアを得ることができます)

checkboxButton.frame = CGRectMake([optOut center].y + pixelsToMoveOverToWhereYouLikeIt, [optOut center].y + pixelsToMoveDownToWhereYouLikeIt , 44, 44);

他の人についても同様です。これにより、参照するオブジェクトに応じて、すべてのビューが相互に関連するか、最初のテキストビューのいずれかになります。

于 2013-01-06T01:24:46.210 に答える
0

テキストフィールドは確かに醜く見えます。custom背景として素敵な自己スタイルの画像を持つタイプの UITextField が必要です。そうすれば、テキストを好きなように配置できます。type のボタンでも同じことを行いcustom、4 つの状態 (チェックなし、チェックなし - 押された状態、チェック済み、およびチェックされた - 押された状態) に 4 つの異なる画像を使用します。

于 2013-01-06T01:21:19.713 に答える