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

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

4
UIViewAlertForUnsatisfiableConstraintsでトラップする方法?
デバッガーログにエラーが表示されます。 Will attempt to recover by breaking constraint <NSLayoutConstraint:0x191f0920 H:[MPKnockoutButton:0x17a876b0]-(34)-[MPDetailSlider:0x17a8bc50](LTR)> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. その通話をどうやってトラップするのですか?それは私のコードのどこにも現れません。

2
setNeedsLayoutとsetNeedsUpdateConstraintsおよびlayoutIfNeededとupdateConstraintsIfNeeded
自動レイアウトチェーンは基本的に3つの異なるプロセスで構成されることを知っています。 制約の更新 レイアウトビュー(ここでフレームの計算を取得します) 表示 何は、私には全く明らかではないとの内側の差です-setNeedsLayoutと-setNeedsUpdateConstraints。Apple Docsから: setNeedsLayout ビューのサブビューのレイアウトを調整する場合は、アプリケーションのメインスレッドでこのメソッドを呼び出します。このメソッドはリクエストを記録し、すぐに戻ります。このメソッドは即時の更新を強制せず、代わりに次の更新サイクルを待機するため、これらのビューを更新する前に、このメソッドを使用して複数のビューのレイアウトを無効にすることができます。この動作により、すべてのレイアウト更新を1つの更新サイクルに統合できます。これは通常、パフォーマンスの点で優れています。 setNeedsUpdateConstraints カスタムビューのプロパティが制約に影響を与える方法で変更された場合、このメソッドを呼び出して、将来のある時点で制約を更新する必要があることを示すことができます。次に、システムはupdateConstraintsを通常のレイアウトパスの一部として呼び出します。制約が必要になる直前に一度に更新することで、レイアウトパス間でビューに複数の変更が加えられたときに、不必要に制約を再計算する必要がなくなります。 制約を変更した後でビューをアニメーション化し、通常は変更をアニメーション化する場合は、たとえば次のようにします。 [UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [self.modifConstrView setNeedsUpdateConstraints]; [self.modifConstrView layoutIfNeeded]; } completion:NULL]; すべてを使用するのでは-setNeedsLayoutなく-setNeedsUpdateConstraints期待どおりに機能する場合は、を使用して変更-layoutIfNeededする-updateConstraintsIfNeededとアニメーションが発生しないことがわかりました。 私は自分の結論を出そうとしました: -updateConstraintsIfNeeded 制約を更新するだけで、レイアウトを強制的に実行しないため、元のフレームは保持されます -setNeedsLayout-updateContraintsメソッドも呼び出す では、一方を他方の代わりに使用してもよいのはいつですか?レイアウトメソッドについては、制約が変更されたビューまたは親ビューで呼び出す必要がありますか?

16
UICollectionView自動レイアウトによるセルのサイズ変更セル
UICollectionViewCells自動レイアウトでセルフサイズ設定を機能させようとしていますが、セルをコンテンツに合わせてサイズ調整できません。セルのcontentViewの内容からセルのサイズが更新される方法を理解できません。 これが私が試した設定です: contentViewにUICollectionViewCella UITextViewを含むカスタム。 のスクロールUITextViewは無効です。 contentViewの水平方向の制約は「H:| [_textView(320)]」です。つまり、これUITextViewは明示的な幅320でセルの左側に固定されています。 contentViewの垂直方向の制約は、「V:| -0-[_ textView]」、つまりUITextViewセルの上部に固定されています。 にUITextViewは、UITextViewレポートがテキストに適合する定数に設定された高さ制約があります。 セルの背景を赤に、UITextView背景を青に設定すると、次のようになります。 これまでに使用してきたプロジェクトをGitHubに配置しました。

12
Autolayout-UIButtonの固有サイズにはタイトルインセットが含まれません
自動レイアウトを使用してUIButtonを配置している場合、そのサイズはコンテンツに合わせて適切に調整されます。 画像を次のように設定した場合 button.image、本来のサイズがこれを考慮しているようです。 しかし、私が微調整した場合 titleEdgeInsetsボタンのと、レイアウトはこれを考慮せず、ボタンのタイトルを切り捨てます。 ボタンの固有の幅がインセットを占めるようにするにはどうすればよいですか? 編集: 私は以下を使用しています: [self.backButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; 目標は、画像とテキストの間にいくらかの分離を加えることです。

8
iOS:自動レイアウトの複数行のUILabel
自動レイアウトで非常に基本的なレイアウト動作を実現しようとして問題が発生しています。私のビューコントローラーはIBでは次のようになります。 トップラベルはタイトルラベルですが、行数はわかりません。テキストのすべての行を表示するには、タイトルラベルが必要です。また、他の2つのラベルと小さな画像をタイトルのすぐ下に配置する必要があります。ラベルと小さな画像の間の垂直方向の間隔の制約、およびタイトルラベルとそのスーパービューの間の上部の間隔の制約、および小さな画像とそのスーパービューの間の下部の間隔の制約を設定しました。白いUIViewには高さの制約がないため、サブビューを含めるには垂直方向に引き伸ばす必要があります。タイトルラベルの行数を0に設定しました。 文字列に必要な行数に合わせてタイトルラベルのサイズを変更するにはどうすればよいですか?私の理解では、自動レイアウトを使用しているため、setFrameメソッドを使用できません。そして、他のビューがタイトルラベルの下に留まるようにする必要があるため(これにより制約があるため)、自動レイアウトを使用する必要があります。 どうすればこれを実現できますか?

18
Autolayoutを使用してUIScrollviewに制約を設定するにはどうすればよいですか?
私は2日間かけて、混合レイアウトと純粋なオートレイアウトアプローチのさまざまなソリューションを試して、オートレイアウトの前の簡単なスクロールビュー設定を実現しましたが、これは公式になりました-私は愚かすぎます。私はこれをストーリーボードで主に設定しています(まあ、それはまさにそれがそうである方法です)。 だからここに助けを求める私の嘆願があります。 ビューツリー: UIView -UIView -UIView ..-UIScrollview ...-UIButton ...-UIButton ...-UIButton ボタンは水平にスクロールすることになっています(左から右、およびその逆)。誰かお願いできますか私は、この使用して、純粋な自動レイアウトを達成するための制約を設定する方法を知っています? - 私は次のように混合アプローチを試しました: UIView - UIView - UIView ..-UIScrollview ...-UIView (contentview) ....-UIButton ....-UIButton ....-UIButton ...との固定幅と高さの制約を設定contentviewするtranslatesAutoresizingMaskIntoConstraints Appleのテクニカルあたりなどの設定。ボタンとスクロールビューは、制約を使用して設定されます。これはスクロールビューのスクロールを取得します(そうです)残念ながら、スクロールが遠すぎます!私の知る限りでは、スクロール幅は、コンテンツビューの設定から何とか2倍になります??? !!! ??? 純粋なオートレイアウトアプローチも試しましたcontentview。を除くすべてのビューはtranslatesAutoresizingMaskIntoConstraints=NOですself.view。ボタンには幅と高さの制約があり、スクロールビューの4つの端すべてに固定されています。何もスクロールしません。 だから私はそれを正しく機能させることができない理由に完全に困惑しています。どんな助けでも大歓迎です、そしてあなたが他の情報を必要とするならば、尋ねてください! ソリューションを含む更新されたスクリーンショット -buttonZ制約: EDIT @ Jamie Forrest したがって、解決策は最後のボタンの間違った末尾制約であることが判明しました。6441の代わりに、私が設定した値は負の-6441でした。トリッキーなのは、ストーリーボードで値を設定するときに、ピンツールバーに2つのオプションがあることです。 現在のキャンバス値は負(スクロールなし)で、下のオプションは正(スクロールをアクティブ化)です。これは私が愚かではないが、少なくとも半盲だと思います。私の弁護のために、XCodeが「正しくない」設定のエラーを表示しないことは、いくらか気になるのではないですか? EDITED AGAIN 今はこれが面白い... -6441(なしスクロール)から6441の末尾に値を変更してスクロールを可能にしました。しかし、私の古くからの友人、「コンテンツサイズが多すぎます」が戻ってきたため、コンテンツサイズは本来の2倍になりました。正しいコンテンツスクロールを取得するための解決策は、末尾の制約をゼロに設定することでした。これはStoryboardで作業する場合は明らかではありませんが、@ Infinity Jamesのコードを見ると、本来あるべき状態です。

4
NSInvalidUnarchiveOperationException:NSLayoutConstraintという名前のクラスをインスタンス化できませんでした
私はこれに非常に新しいです。iPhoneプロジェクト「HelloWorld」について、Appleのチュートリアルを1つずつ実行しました。iPhone 5.0シミュレータで実行するとクラッシュしました。 2012-11-02 14:46:06.782 HelloWorld [9880:c07] *キャッチされない例外 'NSInvalidUnarchiveOperationException'のためにアプリを終了します、理由: 'NSLayoutConstraintという名前のクラスをインスタンス化できませんでした' *最初のコールスタックをスローします:(0x14a2052 0xea2d0a 0x144aae78 0x144a9e7 0x32a9e7 0x32a9d7 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 0x12a9b 0x1fed 0x1f15 0x1の)例外をスロー呼ばTERMINATE(lldb) 誰かが何が悪かったのか教えてもらえますか?Xcode 4.5を使用しています。

13
非表示のUIViewsを持つAutoLayout?
ビジネスロジックによってはUIViews、ほとんどの場合UILabels、を表示/非表示にするのはかなり一般的なパラダイムだと思います。私の質問は、フレームが0x0であるかのように、オートレイアウトを使用して非表示のビューに応答する最良の方法は何ですか?これは、1〜3個の機能の動的リストの例です。 現在、ボタンから最後のラベルまでの上部に10pxのスペースがあります。ラベルが非表示の場合は、上にスライドしません。今のところ、この制約へのアウトレットを作成し、表示しているラベルの数に応じて定数を変更しています。非表示のフレームの上にボタンを押し上げるために負の定数値を使用しているので、これは明らかに少しハックです。また、実際のレイアウト要素に制約されず、他の要素の既知の高さ/パディングに基づいた静的な計算をこっそりと行い、オートレイアウトが何のために構築されたかと明らかに戦うため、それも悪いことです。 動的ラベルに応じて新しい制約を作成することもできますが、これは、いくつかの空白を折りたたみようとするための多くの細かい管理と冗長性です。より良いアプローチはありますか?フレームサイズ0、0を変更し、オートレイアウトに制約を操作せずに機能させるには?ビューを完全に削除しますか? 正直なところ、非表示ビューのコンテキストから定数を変更するだけでは、簡単な計算で1行のコードが必要になります。を使用して新しい制約を再作成すること constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:は非常に重いようです。 2018年2月を編集:UIStackViewsでベンの答えを見る

15
自動レイアウトを使用してテキストに展開するUITextView
プログラムで自動レイアウトを使用して完全にレイアウトされたビューがあります。ビューの中央にUITextViewがあり、その上下にアイテムがあります。すべてが正常に動作しますが、テキストが追加されたときにUITextViewを展開できるようにしたいと考えています。これにより、拡張時に下にあるすべてが押し下げられます。 私はこれを「スプリングとストラット」の方法で行う方法を知っていますが、これを行う自動レイアウト方法はありますか?私が考えることができる唯一の方法は、成長する必要があるたびに制約を削除して再度追加することです。

11
自動レイアウトを使用しているときに、CALayerのアンカーポイントを調整するにはどうすればよいですか?
注:この質問が行われて以来、状況は変化しています。最近の概要については、こちらをご覧ください。 自動レイアウトの前に、フレームを保存し、アンカーポイントを設定し、フレームを復元することで、ビューを移動せずにビューのレイヤーのアンカーポイントを変更できます。 自動レイアウトの世界では、もはやフレームを設定しませんが、制約は、ビューの位置を調整して目的の場所に戻すというタスクには及ばないようです。制約をハックしてビューの位置を変更できますが、回転やその他のサイズ変更イベントでは、これらは再び無効になります。 次の優れたアイデアは、「レイアウト属性の無効なペア(左と幅)」を作成するため機能しません。 layerView.layer.anchorPoint = CGPointMake(1.0, 0.5); // Some other size-related constraints here which all work fine... [self.view addConstraint: [NSLayoutConstraint constraintWithItem:layerView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:layerView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:20.0]]; ここでの私の意図はlayerView、アンカーポイントが調整されたビューの左端を、幅の半分+ 20(スーパービューの左端から差し込みたい距離)に設定することでした。 自動レイアウトでレイアウトされたビューで、ビューの位置を変更せずにアンカーポイントを変更することはできますか?ハードコードされた値を使用し、回転ごとに制約を編集する必要がありますか?私は望んでいない。 ビューに変換を適用したときに正しい視覚効果が得られるように、アンカーポイントを変更する必要があります。
161 ios  calayer  autolayout 



13
UILabel sizeToFitがautolayout iOS6で機能しない
高さがテキストに依存するUILabelをプログラムで(およびどのメソッドで)構成する必要がありますか?Storyboardとコードの組み合わせを使用して設定しようとしていますが、役に立ちません。誰もが推奨していますsizeToFit設定中lineBreakModeとnumberOfLines。しかし、どんなに私がでそのコードを入れた場合viewDidLoad:、viewDidAppear:またはviewDidLayoutSubviews私は仕事にそれを得ることができません。長いテキストに対してボックスを小さくしすぎて大きくならないか、大きくしすぎて縮小しません。
152 ios  ios6  uilabel  autolayout 

4
自動レイアウトですべてのサブビューに合うようにスーパービューのサイズを変更する方法は?
autolayoutについての私の理解は、それがスーパービューのサイズと制約に基づくサイズとサブビューの位置を計算する固有のサイズを取ることです。 このプロセスを逆にする方法はありますか?制約と固有のサイズに基づいてスーパービューのサイズを変更したい。これを達成する最も簡単な方法は何ですか? Xcodeで設計されたビューがあり、これをのヘッダーとして使用していUITableViewます。このビューには、ラベルとボタンが含まれています。ラベルのサイズはデータによって異なります。制約に応じて、ラベルはボタンを正常に押し下げます。または、ボタンとスーパービューの下部の間に制約がある場合、ラベルは圧縮されます。 同様の質問をいくつか見つけましたが、良い簡単な答えはありません。

20
動的なセルの高さのあるUITableViewのreloadData()が原因でスクロールが不安定になる
これは一般的な問題である可能性があり、一般的な解決策があるかどうか疑問に思っていました。 基本的に、私のUITableViewには、すべてのセルの動的なセルの高さがあります。UITableViewの一番上にいない場合、上にtableView.reloadData()スクロールするとびくびくします。 これは、データをリロードしたため、上にスクロールしているときに、UITableViewが表示されている各セルの高さを再計算しているためと考えられます。それをどのように軽減するか、または特定のIndexPathからUITableViewの最後までのみreloadDataをリロードする方法は? さらに、何とか一番上までスクロールしても、下にスクロールしてから上にスクロールできます。ジャンプする必要はありません。これは、UITableViewCellの高さが既に計算されているためです。

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