web-dev-qa-db-ja.com

自動レイアウト-割合による位置付け

ラインに沿ってドットをマッピングしたいのですが。

line across screen

行の長さはデバイスと方向によって異なり、常に画面全体に拡大されます。そのため、positionドットを相対パーセンテージ値。

これまでのところ、ある種のポイント値で定義されている制約のみが見つかりました( Doc

パーセント値も制約として使用できますか?これらのドットをスケーラブルな方法で配置する方法についてのアイデア...またはこの変換/配置を「手動で」行う必要がありますか?

34
Bernd

はい、ドットをビューの幅の一部として配置できます。 NSLayoutConstraintメソッドconstraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:には、スーパービューとそのサブビューの間の分数関係を使用できる乗数パラメーターがあります。スーパービューの右端はそのビュー(全幅ビューの場合は画面)の幅になるため、以下のような制約を作成すると、点は線に沿ってわずかな距離に配置されます。

-(void)viewDidLoad {
      [super viewDidLoad];
      [self.view removeConstraint:self.leftConDark];
      [self.view removeConstraint:self.leftConLight];
      NSLayoutConstraint *lcd = [NSLayoutConstraint constraintWithItem:self.darkButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.5 
                                                              constant:0];
      NSLayoutConstraint *lcl = [NSLayoutConstraint constraintWithItem:self.lightButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.9 
                                                              constant:0];
      [self.view addConstraints:@[lcd,lcl]];
}

この例では、2つのUIButton(情報タイプdarkおよびlight)を配置しています。私はそれらをIBに追加し、ビューの左側にあるそれらの制約にIBOutletsを作成しました(システムが私に与えたものであり、右側にある可能性があります-とにかく削除するだけなので問題ではありません)コードでドットを作成する場合は、これを行う必要はありません)。コードでこれらの制約を削除してから、ボタンの中央を画面全体の50%と90%に配置する新しい制約を追加します。

47
rdelmar

私は自動レイアウトのエキスパートではありません(まだ有能です!)が、XCode 6以降では、IBでこれを実行できるようです。

  1. オブジェクトを選択します。
  2. サイズインスペクターを表示する(ルーラーをクリック) size inspector

  3. 制約の長方形をダブルクリックします(明確ではありません!「編集」で別の場所に移動します)

constraint rectangle

  1. ここでは、上記の答えと同じように乗数を設定できます。

enter image description here

12
Greg Bell