2016-04-12 6 views
0

Xcode 7でAutoLayoutを使用しているときに、ビュー内に5つのサブビューを広げようと思ったのですが、私は5つのビューをcollectionViewControllerのフッターに追加しましたこれらのビューは幅の異なるデバイスに表示されている間に水平方向に均等に拡散されます。私はSO上でいくつかのスレッドを見つけることができましたが、残念ながらそれらのすべてがXcode 7で時代遅れであり、 "50評判"を持たないためコメントできないので、私の唯一の希望は自分のスレッドを作成することです。これを数時間にわたってバナナに行って、本当に助けに感謝します。AutoLayoutを使用してXcode 7の親の幅に均等に5つのサブビューを広げる

+1

インターフェイスビルダーまたはコードを使用していますか? – SeanLintern88

+0

コードを表示します。あなたはどこに苦しんでいますか?以前のバージョンのXcode(これに関して)で動作するものは、Xcode 7でもほぼ同じように動作します。 – Fogmeister

答えて

2

これは、AutoLayoutの非常に単純なレイアウトにする必要があります。

まず、すべてのビューの幅が同じであることを確認する必要があります。 IBでは、それらをすべて選択し、Interface Builderで「制約を追加」ボタンを使用し、「等しい幅」ボタンを押します。コードではこれはやや複雑ですが同様に可能です。

第2に、各ビューの先頭と末尾が互いに「固定」されていることを確認する必要があります。最初のビューを選択し、([制約を追加]ボタンを使用して)スーパービューの左端に固定します。次に、最初のビューから2番目のビューまでCTRL-DRAGを押し、「水平間隔」を選択します。ビューの各ペアに対してこれを繰り返します。

また、www.raywenderlich.comのサイトをご覧になることをお勧めします。そこには非常に優れたAutoLayoutチュートリアルがあります。

+0

Phew、本当にありがとう、私は実際には、このソリューションを記述している以前の投稿のうちの1つを実際に読んでいましたが、以前は機能しませんでしたが、今回は完全にトリックでした。 IBが変更後に自分自身をリフレッシュしないと、問題が発生した可能性があります。件名に関するWenderlichのチュートリアルをチェックします。ありがとうございます。 –

+0

@GerwazySokołowskiがお手伝いをします。うーん、それはあなたのために働いた:-) – Fogmeister

-2

あなたが自動レイアウトを使用したいと

お使いのデバイスの境界あたりとしてビュー間を水平に等しいスペースが必要な場合は、最初にあなたのビューとスーパーとの比を計算し、スペース

末尾またはリードの乗数としてそれを適用する必要がありますする必要があります

http://technet.weblineindia.com/mobile/setting-up-equal-horizontal-spacing-for-components-using-autolayout/

が、これは確かにあなたを助ける従ってより明確に理解するために、このチュートリアルを参照してください。..

0

あなたはコードで追加した場合:あなたは、それが等しい与え、その後、左に最初のビューを入れてInterface Builderを(1-5)

を使用している場合はこれが彼らの位置に基づいて制約を適用します

func constraintsForView(view: UIView, position: Int, superViewWidth: CGFloat) -> [NSLayoutConstraint] { 
    let views = ["view": view] 

    let hDistance: CGFloat = (superViewWidth/5.0) * CGFloat(position) 

    var constraints = [NSLayoutConstraint]() 

    let h = "H:|-\(hDistance)-[view]" 
    let v = "V:|[view]|" 

    let H_Constraint = NSLayoutConstraint.constraintsWithVisualFormat(h, options: [], metrics: nil, views: views) ?? [NSLayoutConstraint]() 
    let V_Constraint = NSLayoutConstraint.constraintsWithVisualFormat(v, options: [], metrics: nil, views: views) ?? [NSLayoutConstraint]() 

    constraints.appendContentsOf(H_Constraint) 
    constraints.appendContentsOf(V_Constraint) 

    constraints.append(NSLayoutConstraint(item: view, attribute: .Width, relatedBy: .Equal, toItem: view.superview, attribute: .Width, multiplier: 0.2, constant: 0)) 

    return constraints 
} 

幅をスーパービューして乗数を0.2に変更した後、次のビューを追加して最初のビューに左向きに取り付け、幅を同じに戻し、5度まで同じことを続け、ちょうど上/下/左/右に置く。

+0

私はIBを使用していますが、その生のコードソリューションを提供してくれてありがとう、将来的には非常に役に立つかもしれません。 –

0

サブビューを選択し、親ビューで等幅の制約を設定し、IBを使用する場合は要件ごとに乗数を編集します。あるいは、プログラムで制約を与えるだけです。

0

コードが添付されていないので、私はAutoLayoutで自分の経験の一部を共有します。

重要な点が2つあります。 1.オートレイアウトの仕組みと原則を十分に理解してください。 2.練習は絶対必要ですが、簡単なケースから始めなければなりません。

xibやストーリーボードを始めるのは、わかりやすく簡単です。野心的ではありません。最初は親ビューで2つのビューを均等に広げてみてください。

私はxibの練習中に自分自身で2段階の目標を設定しました。 (1)必要な制約を追加してください。すべてが矛盾なく動作していることを確認してください。 (2)できるだけ多くの制約を削除し、すべてがまだ機能していることを確認してください。

練習が終わったら、アップルの自動レイアウトロジックについて理解しているはずですが、それは最も重要なことです。

最後に、お待ちください。すべての問題には解決策があります。あなたが見つけ出すのを待っています。

+0

私はIBでどのようにコードを提供できるかわからないので、おそらくいくつかのXMLソースですか?それでもアドバイスをいただき、ありがとうございました。実際にはこのスレッドの解決策を得ることができましたが、わかりやすいAutoLayoutロジックが完全にわかりません。 –

関連する問題