2014-01-07 13 views
6

AutoLayoutの使用に関するチュートリアルを読んだことがありますが、私は信じられないほど簡単なものを実現する方法を見つけられないようです。私は、3.5インチと4インチのiPhone/iPod Touchスクリーン用のアプリケーションを設計しています。それはそうのような各タブの全体を埋めるのUITableViewを持つ単純なタブバーのアプリケーション、です:Interface Builderがオブジェクトを画面の端にロックする

Interface Builder

のUITableViewは関係なく、画面があるかどうかの、画面の端にロックするために、私は希望3.5または4インチ。私が現在持っているものは4インチの画面でうまくいきますが、3.5ではUITableViewが画面の幅を超えています。

私はいくつかのAutoLayoutチュートリアルを読んでみましたが、Interface Builderの制約をうかがうだけでしたが、成功しませんでした。私はあなたが提供することができる任意のヘルプに感謝します。

+0

を行い、あなたにもちょうど自動レイアウトを無効にするかもしれないし、すべての4辺にテーブルビューをピンに自動サイズ変更マスク(スプリング、ストラット)を設定し、それは幅と高さを柔軟にすることができます。しかし、自動レイアウトを使用することに興味があれば、私は個人的にInterface Builderの代わりにコードで制約を作成することをお勧めします.BBは多くの場合、あなたが得意でないものを扱う苦痛があります。私はそれをはるかに容易にする素敵なオープンソースのAPIを持って、あなたも遊ぶことができるサンプルプロジェクトがあります:https://github.com/smileyborg/UIView-AutoLayout – smileyborg

+0

(UIView + AutoLayout APIを使用すると、 '' tableView autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsZero]; ')これは簡単です! – smileyborg

+0

あなたは今どのような制約を設定していますか?あなたはあなたが間違っていた場所を理解するのを助けることができるようにそれらを投稿することができます。 – greg

答えて

7

親のすべてのエッジにUITableViewを添付する必要があります。UITableViewは、デバイスのUIViewを埋め込むように拡大または縮小します。これにより、iPadを含むすべてのiDデバイスで適切なサイズに見えるようになります。下のスクリーンショットに描かれたよう、あなただけ(側面に触れる)余白が0に設定されていることを確認すること、すべての赤い点線のガイドをタップすることができます。

AutoLayout via IB for a UITableView touching all sides of the parent view

あなたもCtrlキー +左方向にドラッグ可能性があり、 「先行スペースからコンテナへ」、「後続スペースからコンテナへ」、「上から上へのレイアウトガイド」、および「下スペースから底レイアウトへ」をそれぞれ右ドラッグし、上にドラッグして下にドラッグします。あなたが本当には、明示的になりたい場合

/* Turn off springs/structs */ 
self.tableView.translatesAutoresizingMaskIntoConstraints = NO; 

/* Leading and trailing constraints */ 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_tableView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]]; 
/* Top and bottom constraints */ 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_tableView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]]; 

...または:

代わりに、(下記のおUITableViewが自動@synthesized@propertyという名前tableViewであると仮定しUIViewControllerためのコード)Visual Format Language (VFL)を使用することができます(などタイピング):

/* Leading constaint (could use NSLayoutAttributeLeft here as well) */ 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:0]]; 
/* Trailing constraint (could use NSLayoutAttributeRight here as well) */ 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]]; 
/* Top constraint */ 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; 
/* Bottom constraint */ 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]]; 

このすべてで重要なことはUITableViewが0123の子であるということですUIViewControllerの(これはおそらくそうです)。 viewはデフォルトでは画面が予想どおりに塗りつぶされ、上のすべての方法ではレイアウトを最大化されたビューのエッジに対してしっかりと保持するように求めています。

1

NSLayoutConstraintsは、このIMHOのばかばかしい過度のことです。 はちょうどそれをオフにして、何をやっているために、この

self.tableview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
+0

FYI私は、iOSがこの自動サイズ変更マスクをレイアウトの制約の中に変換することを確かめているので、Jefの答えは実際はレイアウトの制約を利用する簡単な方法です。 – bgfriend0

+0

面白い、ありがたく、面白い。以前のシステムのpre iOs7を除いて、ダミーを吐き出し、 'wtf is NSLayoutConstraint'型の例外を投げるのではなく、期待どおりに動作するだろう。 – Jef

+0

右。興味があれば、UIViewのtranslatesAutoresizingMaskIntoConstraintsプロパティをチェックすることができます。 – bgfriend0

関連する問題