2016-10-14 10 views
0

私はメインビューの中にビューとラベルを持っています。ビューは水平方向と垂直方向の両方に配置されます。現在、ラベルは画面上部から60ピクセルに設定されています。しかし、iPhone 4Sではかなり悪く見えます。ラベルが見た目に近すぎます。iOS Layout Xcode 8

私はそれが上から30個のピクセルであろうのみiPhone 4S上にそれを設定しようとしたが、私はサイズクラスを調整する代わりに、単に1つの装置た推測。

私の質問はこれです。まず、特定のデバイスのレイアウトを調整する良い方法がありますか?もう1つは、画面の上部とビューの上部の中間にラベルを配置する方法ですか?

参考のため、これもすべて縦向きです。

答えて

1

通常、特定のデバイスのレイアウト制約を追加しないようにしたいとします。サイズクラスと向きは、より柔軟性があるため、より優れています。しかし、実際にそれを行う必要がある場合(場合によっては、本当に特定のレイアウトを持っている場合はやむを得ない場合もあります)、と他のいくつかのメカニズムを使用することができます(単純に画面のサイズを取得し、この場合には480ポイントで既知の高さに対するそれはあなたがあなたの制約を設定しているときだけif文でこのコードを使用し、それに応じて変更します。あなたはこれが機能するためのコードであなたの制約を設定する必要があります。

2つ目の質問については、このようにビューを中央に置く方法がいくつかありますが、最も一般的なのはUILayoutGuideです(または、<のiOS 9をサポートしていない場合は、スペーサー表示が不可視です)。インタフェースビルダーやコードでこれをやってください。このようなもの:

// Assuming you have a view called topView, a root view which are already configured and a myLabel view, this code only covers the vertical aspect of the layout 

let guide1 = UILayoutGuide() 
view.addLayoutGuide(guide1) 
let guide2 = UILayoutGuide() 
view.addLayoutGuide(guide2) 

// space above the label 
guide1.topAnchor.constraint(equalTo: topView.bottomAnchor).isActive = true 
// space below the label 
guide2.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 
// make the spaces equal 
guide1.heightAnchor.constraint(equalTo: guide2.heightAnchor).isActive = true 

myLabel.topAnchor.constraint(equalTo: guide1.bottomAnchor).isActive = true 
myLabel.bottomAnchor.constraint(equalTo: guide2.topAnchor).isActive = true 
+0

ストーリーボードファイルに私の全体のインタフェース作業を保つために、可能な場合うん、私は好みます。インターフェイスに関しては、コードで行う必要がありません。それは可能かどうか? –

+0

インターフェースビルダーはまだ 'UILayoutGuide'をサポートしていないようですが、それは問題ありません。あなたは古いルートに行き、不可視のビューを代わりに追加することができます。ストーリーボードに2つの非表示のビューを追加し、上のコードで示したようにアンカーします。あなたのラベルの下に1つ、上に1つあり、高さを同じにします。これについて詳しくは、[こちらが回答です](http://stackoverflow.com/questions/13075415/evenly-space-multiple-views-within-a-container-view)を参照してください。 – Dima