タグ付けされた質問 「autolayout」

自動レイアウトは、OS XおよびiOS用の制約ベースの説明的なユーザーインターフェイスレイアウトシステムです。

6
自動レイアウト-スーパービューの半分の高さを基準にしてビューの高さを調整します
最近autolayoutsに入り始めて、私は本当に些細な問題の例のように見えるのに行き詰まっています。画面の最上部に座って、画面の高さの半分を占めるようにするビューがあります。自動レイアウトの前に簡単-所定の位置に貼り付け、スーパービューのサイズが変更されたときに垂直方向に拡大するように伝えます。 今、私は私の人生のためにそれを行う方法を見ることができません。これを設定しようとすると、次のような結果になります。 下部のスペース制約は「284に等しい」に設定されています。これは、iPhone4レイアウトに変更した場合、絶対に意味がなく、画面の下部に284ポイントのスペースを維持し、ビューを縮小して半分にしないためです。画面のサイズ。また、その制約を他のビューの高さの一部に等しく設定する方法はありません。 しばらく苦労した後、これを行うために私が考えられる唯一の方法は、このビューの下に別のビューを導入し、それらの高さを均等に固定し、それらを上下に配置してから、2番目(下)のビューを非表示に設定することです..少し見苦しいようです! 私は明白な何かを逃していますか?
136 ios  autolayout 

6
iOS:新しいautolayout制約(高さ)をアニメーション化する方法
これまでにautolayout制約を扱ったことはありません。私が作業している小さな新しいアプリがあり、NIBのビューがデフォルトで自動レイアウトになっていることに気付きました。それで、私はそれを使って作業する機会を得て、Appleがこれでどこに向かっているのかを理解しようとするだろうと考えました。 最初の課題: MKMapViewのサイズを変更する必要があり、それを新しい位置にアニメーション化したいと思います。私が慣れている方法でこれを行うと: [UIView animateWithDuration:1.2f animations:^{ CGRect theFrame = worldView.frame; CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170); worldView.frame = newFrame; }]; ...その後、兄弟ビューが更新されるたびにMKMapViewが元の高さに「スナップ」します(私の場合、UISegmentedControlのタイトルが更新されています[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0])。 だから、私は考えて私がやりたいことは、それがあることUISegmentedControlの先頭に相対的であることに、親ビューの絶頂に等しいからMKMapViewの制約を変更されたカバーします:V:[MKMapView]-(16)-[UISegmentedControl] MKMapViewの高さを短くして、マップビューの下の一部のコントロールが表示されるようにしたいのですが。これを行うには、固定フルサイズビューから、UISegmentedControlの上部が下部に制限されているビューに制限を変更する必要があると思います。ビューが新しいサイズに縮小するときにアニメーションを表示したいと思います。 これをどうやってやるの? 編集- このアニメーションはされていないアニメーションビューの下部には、170を瞬時に動かすんが。 [UIView animateWithDuration:1.2f animations:^{ self.nibMapViewConstraint.constant = -170; }]; そしてnibMapViewConstraint下の垂直方向のスペースの制約にIBにまで配線されています。

15
全幅セルのUICollectionViewは、自動レイアウトの動的な高さを許可しますか?
垂直ではUICollectionView、 全幅のセルを持つことは可能ですが、動的な高さを自動レイアウトで制御できますか? これは、おそらく「本当に良い答えがないiOSで最も重要な質問」だと私は思います。 重要: 99%のケースでは、全幅のセル+自動レイアウトの動的な高さを実現するには、テーブルビューを使用するだけです。とても簡単です。 では、コレクションビューが必要な場所の例は何でしょうか。 コレクションビューは、テーブルビューよりも信じられないほど強力です。 全幅のセル+自動レイアウトの動的な高さを実現するために実際にコレクションビューを使用する必要がある簡単な例: コレクションビューで2つのレイアウト間をアニメーション化する場合。たとえば、デバイスが回転するときの1列と2列の間のレイアウト。 これは、iOSで一般的で通常のイディオムです。残念ながら、それはこのQAで提起された問題を解決することによってのみ達成できます。:-/

13
FlowLayoutでUICollectionViewの高さを決定する方法
私が持っているUICollectionViewとしUICollectionViewFlowLayout、と私は(に復帰するために、そのコンテンツのサイズを計算するintrinsicContentSize自動レイアウトを経由してその高さを調整するために必要)。 問題は次のとおりです。すべてのセルの高さが固定されていても等しい場合でも、に「行」/行の数がわかりませんUICollectionView。また、データアイテムを表すセルの幅が異なり、結果としての1行にあるアイテムの数も異なるため、データソースのアイテムの数でその数を判断することもできませんUICollectionView。 公式ドキュメントでこのトピックに関するヒントを見つけることができなかったため、グーグル操作でそれ以上何もできなかったので、助けやアイデアをいただければ幸いです。

24
UITableViewの動的セルの高さは、スクロールした後でのみ正しくなる
私が持っているUITableViewカスタムでUITableViewCell自動レイアウトを使用して、ストーリーボードで定義されています。セルには複数の行がありUILabelsます。 はUITableViewセルの高さを適切に計算しているように見えますが、最初のいくつかのセルでは、高さがラベル間で適切に分割されていません。少しスクロールした後、すべてが期待どおりに機能します(最初は正しくなかったセルも)。 - (void)viewDidLoad { [super viewDidLoad] // ... self.tableView.rowHeight = UITableViewAutomaticDimension; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"]; // ... // Set label.text for variable length string. return cell; } 自動レイアウトが最初の数回その仕事をすることができない原因となっている、私が見逃しているかもしれないものはありますか? この動作を示すサンプルプロジェクトを作成しました。

30
UITableViewCellサブクラスで「-layoutSubviewsを実行した後も自動レイアウトが必要」
XCode 4.5とiOS 6を使用して、カスタムセルを含むシンプルなテーブルビューのアプリを開発しています。私はこれをiOS 5以下で100回行いましたが、何らかの理由で新しいautoLayoutシステムが多くの問題を引き起こしています。 テーブルビューとプロトタイプセルをIBでセットアップし、サブビューを追加してそれらをIBOutletsとして配線してから、デリゲートとdataSourceをセットアップしました。ただし、最初のセルがからフェッチされるたびcellForRowAtIndexPathに、次のエラーが発生します。 ***-[ShopCell layoutSublayersOfLayer:]、/ SourceCache / UIKit_Sim / UIKit-2372 / UIView.m:5776のアサーションエラー ***キャッチされない例外 'NSInternalInconsistencyException'によりアプリを終了します。理由: '-layoutSubviewsを実行した後も自動レイアウトが必要です。ShopCellの-layoutSubviewsの実装は、superを呼び出す必要があります。 私はサブクラス化されたセル(ShopCell)に-layoutSubviewsメソッドを実装していません。それを実行してスーパーコールを追加しようとしても、同じエラーが発生することを示唆しています。サブビューをIBのセルから削除し、それを標準のUITableViewCellに変更すると、すべて期待どおりに機能しますが、もちろんセルにはデータが残っていません。 私が見逃している単純なものがあることはほぼ確実ですが、私が間違ったことを示唆するドキュメントやガイドを見つけることができません。任意の助けいただければ幸いです。 編集: IBのUITableViewCellに変更して、すべてのサブビューをそのままにしてみましたが、それでも同じエラーが発生しました。

3
自動レイアウトを使用して合計幅のパーセンテージを作成するにはどうすればよいですか?
3つの動的な列を作成する必要があります。それぞれの列は、全幅の一定のパーセンテージを持っています。3分の1ではなく、異なる値。たとえば、次の図は3つの列を示しています。最初の列は42%幅、2番目は25%幅、3番目は33%幅です。 ビューコントローラ全体で600ピクセルの場合、それぞれ252、150、198ピクセルになります。 ただし、それ以降のディスプレイサイズ(iPhone 4ランドスケープ(幅960)またはiPad 2ポートレート(幅768))では、相対的なパーセンテージを同じにします(上記のピクセル幅ではありません)。 ストーリーボードを使用して(つまり、コードなしで)これを行う方法はありますか?これはコードで簡単に実行できますが、私の目標は、この表示ロジックをできるだけストーリーボードに配置することです。
114 ios  xcode  autolayout 

5
自動レイアウトを使用してUICollectionViewでセルの1つの次元を指定する
iOS 8では、UICollectionViewFlowLayoutは独自のコンテンツサイズに基づいてセルのサイズを自動的に変更します。これにより、セルのコンテンツに応じて、幅と高さの両方でセルのサイズが変更されます。 すべてのセルの幅(または高さ)に固定値を指定して、他の寸法のサイズを変更できるようにすることはできますか? 簡単な例として、セル内の複数行のラベルを、セルの側面に配置する制約のあるものについて考えます。複数行のラベルは、テキストに合わせてさまざまな方法でサイズ変更できます。セルはコレクションビューの幅を埋め、それに応じて高さを調整する必要があります。代わりに、セルのサイズが不規則になり、セルのサイズがコレクションビューのスクロールできないサイズよりも大きい場合に、クラッシュが発生します。 iOS 8ではメソッドが導入されてsystemLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority:います。コレクションビューの各セルについて、レイアウトはこのメソッドをセルで呼び出し、推定サイズを渡します。私にとって意味のあることは、セルでこのメソッドをオーバーライドし、指定されたサイズを渡して、水平制約を必須に設定し、優先順位を垂直制約に低く設定することです。このようにして、水平サイズはレイアウトで設定された値に固定され、垂直サイズは柔軟にすることができます。 このようなもの: - (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; attributes.size = [self systemLayoutSizeFittingSize:layoutAttributes.size withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; return attributes; } ただし、この方法で返されるサイズは完全に奇妙です。このメソッドに関するドキュメントは私には非常に不明確でありUILayoutFittingCompressedSize UILayoutFittingExpandedSize、ゼロサイズとかなり大きいものを表す定数の使用について言及しています。 sizeこのメソッドのパラメーターは本当に2つの定数を渡す方法にすぎませんか?特定のサイズに適切な高さを取得するために期待する動作を実現する方法はありませんか? 代替ソリューション 1)セルに特定の幅を指定する制約を追加すると、正しいレイアウトが実現されます。この制約は、安全な参照がないセルのコレクションビューのサイズに設定する必要があるため、不適切なソリューションです。セルの構成時にその制約の値を渡すことができますが、これも完全に直観に反するようです。セルまたはそのコンテンツビューに直接制約を追加すると多くの問題が発生するため、これも厄介です。 2)テーブルビューを使用します。セルの幅は固定されているので、テーブルビューはそのままの状態で機能しますが、複数の列に固定幅のセルがあるiPadレイアウトのような他の状況には対応しません。

7
自動レイアウト:トップレイアウトガイドではなくスーパービューに制約を追加しますか?
ストーリーボードのUIViewControllerにUIViewがあり、上端からの距離を表示するスペースに制約を追加したい。 これで、通常の操作をCtrl + ViewControllerのメインビューにドラッグすると、トップレイアウトガイドに設定するオプションのみが表示されます。 これは私にとって問題です。アプリのある時点でメインビューを20-50pxほど上に移動しようとすると、そのビューは移動しません...スーパービューに位置合わせされていないためです。 ストーリーボードでこれを手動で行うにはどうすればよいですか、またはプログラムで追加する必要がありますか? 私はxcode 6を使用しています。

8
自動レイアウトを使用して動的テーブルビューセクションヘッダーの高さを取得することは可能ですか?
iOS 8の新機能。行の推定高さを設定するだけで100%動的なテーブルビューセルを取得し、自動レイアウトを使用してセル内の要素をレイアウトできます。コンテンツの高さが増加すると、セルの高さも増加します。これは非常に便利です。テーブルビューのセクションヘッダーでも同じことを成し遂げることができるのでしょうか。 缶1は、例えば、作成UIView中をtableView:viewForHeaderInSection:追加し、UILabelサブビューを、ビューに対してラベルの自動レイアウトの制約を指定して、ラベルの内容に合わせて高さがビューの増加を持って、実装することなくtableView:heightForHeaderInSection:? viewForHeaderInSection状態のドキュメント:「このメソッドは、tableView:heightForHeaderInSection:も実装されている場合にのみ正しく機能します。」iOS 8で変更があったかどうかは聞いていません。 それができない場合、この動作を模倣する最良の方法は何ですか?

6
ビューが削除されたときに制約で何が起こるか
私の質問は単純ですが、ドキュメントに情報が見つかりませんでした。 ビューがビュー階層から削除される(または別のビューに移動される)と、レイアウト制約はどうなりますか? たとえば、CサブビューAとのコンテナがあるとしBます。コンテナにCはいくつかの制約があります。次にを呼び出します[A removeFromSuperview]。何がための制約で起こりますかA? 再度追加AするCとどうなりますか?

5
自動レイアウト制約を使用しているときに、ビューの現在の幅と高さを取得するにはどうすればよいですか?
フレームプロパティについては触れていません。これは、xibでのビューのサイズしか取得できないためです。制約のためにビューのサイズが変更されたときのことです(おそらく回転後、またはイベントに応答して)。現在の幅と高さを取得する方法はありますか? 幅と高さの制約を探すためにその制約を反復してみましたが、それはあまりクリーンではなく、固有の制約がある場合は失敗します(2つを区別できないため)。また、これは実際に幅と高さの制約がある場合にのみ機能し、サイズ変更のために他の制約に依存している場合には機能しません。 なぜこれが私にとってそれほど難しいのですか?ARG!
108 ios  autolayout 

14
実行時に特定のサブビューの自動レイアウトを無効にできますか?
フレームをプログラムで操作する必要があるビューがあります。これは、フレームの原点を操作することによってスーパービューの周りをスクロールおよびズームするコンテンツにラップする一種のドキュメントビューです。Autolayoutは実行時にこれと戦う。 自動レイアウトを無効にすることは、他のビューのレイアウトを処理するために合理的に使用できるため、完全に少し厳しいように見えます。私が望むのは、ある種の「null制約」のようです。

10
UITableViewCellのiOS7での自動レイアウト制約の問題
プログラムで自動レイアウト制約を使用してカスタムUITableViewセルをレイアウトし、セルサイズを正しく定義しています tableView:heightForRowAtIndexPath: これは、iOS6にうまく働いていますし、それはありませんルックにもiOS7に罰金を しかし、iOS7でアプリを実行すると、コンソールに次のようなメッセージが表示されます。 Break on objc_exception_throw to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2013-10-02 09:56:44.847 Vente-Exclusive[76306:a0b] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you …

8
いつレイアウト制約をアクティブ化/非アクティブ化できますか?
IBで複数の制約セットを設定しましたが、状態によってプログラムでそれらを切り替えたいのですが。ありますconstraintsAIBからインストールとしてマークされているすべてのそれらの出口コレクションは、およびconstraintsBすべての出口コレクションは、IBにアンインストールされます。 次のように、プログラムで2つのセットを切り替えることができます。 NSLayoutConstraint.deactivateConstraints(constraintsA) NSLayoutConstraint.activateConstraints(constraintsB) しかし... いつそれをするべきかわからない。で一度はできるはずですが、うまくviewDidLoadいきません。私は呼び出ししようとしたview.updateConstraints()とview.layoutSubviews()制約を設定した後、しかし無駄に。 viewDidLayoutSubviewsすべてに制約を設定すると、期待どおりに機能することがわかりました。2つのことを知りたいと思います... なぜこの動作になるのですか? viewDidLoadから制約をアクティブ化/非アクティブ化することは可能ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.