問題タブ [layoutsubviews]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1181 参照

iphone - iOS4.0でズーム中にUIScrollViewがlayoutSubviewsを呼び出さない

ここで尋ねられたUIScrollViewの質問の多くを読みましたが、この問題に答えたものはありませんでした。

他のサブビューを含むビューをズームするUIScrollViewがあります。ズームが発生しているときは、ビューのサブビューを特定の場所に移動する必要があります。UIScrollViewのlayoutSubviewsメソッドでフレームを適宜変更することで、これを実現できます。

iOS 3.2以下では、これは、zoomToRect:animated:メソッドを使用した指ズームと実用的なズームの両方でうまく機能します。

iOS 4.0以降では、これは指のズームにのみ最適です。ZoomToRect:animated:を使用した実用的なズームでは、layoutSubviewsの呼び出しは1回だけ(ズームの最後に)発生します。サブビューがズームとともにスムーズな位置変更を行えるように、ズーム中に何度もこのメソッドを呼び出す必要があります。

したがって、要約すると、iOS 3.2では、layoutSubviewsの呼び出しは何度も発生し、iOS 4.0では、zoomToRect:animated:を呼び出したときにlayoutSubviewsの呼び出しは1回だけ発生します。誰かが私の問題の解決策を知っていますか?

0 投票する
1 に答える
7353 参照

objective-c - ファイルでカテゴリを指定してUItableViewcellのlayoutSubviewsメソッドを使用すると、何かが消えました

以下のコードのように、カテゴリでUItableViewcellのlayoutSubviewsメソッドを使用したとき

以下のコードを使用してセルを描画すると、textLabelが消えてしまいました。なぜそうなったかは誰にも分かります。

0 投票する
1 に答える
478 参照

ios - iOS: レイヤー (CADisplayLink で更新) がビュー トリガー [view layoutSubviews] 60x/sec に追加されました -- なぜですか?

私はこれを理解することはできません。

私には見解があります。

それはスピードメーターです。

スピードメーターに針を入れました:

針オブジェクトには CALayer プロパティが含まれています。

針は、フレームごとに自分自身を配置します。独自の表示リンク ハンドラーを設定し、このレイヤーで変換を実行します。

突然、ビューの layoutSubviews メソッドがフレームごとにヒットします。

この振る舞いが理解できません。

このメソッドがヒットする SUPERview の変更を理解できます。しかし、サブレイヤーはどのようにこれを強制できますか?

確かに、サブレイヤーはその親に翻弄されるべきですか?

設定してみた

これは明らかに効果がありません

私が探している物件は

何が起こっている?

0 投票する
1 に答える
452 参照

iphone - サブビュー レイアウトのカスタム ビューのカスタム メソッド、または layoutSubviews/layoutIfNeeded の使用

UIViewController 内で使用されるカスタム UIView があります。カスタム ビューには、カスタム/プログラム レイアウトが必要です。私が現在行っていることは、コントローラーの「viewDidAppear」メソッド内から、「layoutThisView」という場所に配置したカスタム ビュー メソッドを呼び出すことです。これはうまくいくようです。

質問 - このアプローチの代わりに UIView layoutSubviews/layoutIfNeeded メソッドを使用する必要がありますか? これは役に立ちますか/より良いアプローチになりますか?

0 投票する
2 に答える
928 参照

iphone - superViewがlayoutSubviewsをインターセプトするようにすることは可能ですか:サブビューから?

layoutSubviews:柔軟なレイアウトを可能にするために、すべてのサブビューを自動的に相互にレイアウトするようにオーバーライドし、サブビューの1つがサイズ変更されるたびにこれを継続するサブクラスUIViewを作成したいと思いました。

ただし、スーパービューに呼び出す必要があることを知らせるために考えられる唯一の方法はlayoutSubviews:、各サブビューでそのメソッドをオーバーライドすることです。これは避けたいことです(ユーザーが任意のUIViewを追加できるようにしたい)監督にそしてこれを世話してもらいます)。

問題のサブビューにコードを追加せずlayoutSubviews:に、サブビューのサイズが変更されるたびにスーパービューが呼び出す方法はありますか?

0 投票する
4 に答える
61124 参照

ios - UIViewのlayoutSubviewsを強制する方法は?

私の場合、autoresizingMasks が機能しないため、縦向きと横向きの専用の手動で設定されたフレームを持つカスタム UIView があります。

このフレームを次のように設定しました。

そして、それは期待どおりに機能します。

私の問題は、私の UIView に、縦向き/横向き専用の位置を持つサブビューがさらにあることです。

これらのサブビューを次の場所に配置します。

たとえば、viewController を縦向きのままにし、別の viewController で横向きに回転してから、この viewController に戻ると、ビューのサイズが正しく変更されていることがわかりますが、layoutSubviews に配置されるビューのサブビューはまだ再配置されていませんが、ビューが既に表示された後、アニメーション化された方法でサイズ変更されます。

私はviewDidAppearで何もしません、そして私はすでに電話を試みました

としても:

ですが、viewWillAppear何も変わっていないようです。

私が間違っていることはありますか?

0 投票する
2 に答える
1968 参照

ios - UIScrollView layoutSubviewsの動作はiOS5で変更されますか?

UIViewのサブクラスであり、UIScrollViewを含むコンポーネントに取り組んでいます。スクロールすると、ビルドするSDKによって動作が異なることに気付きました。iOS 4では、layoutSubviewsメッセージはスクロールビューのスーパービュー(私のコンポーネント)で送信されますが、iOS 5では、メッセージはもう送信されていないようです...

iOS 5のリリースノートと変更ログを調べたところ、そのような変更についての言及は見つかりませんでした。私は何かが恋しかったですか?

0 投票する
1 に答える
730 参照

ios - iPhone-サブビューの更新時に呼び出されるlayoutSubviews

グリッドのようなレイアウトのカスタムビューがあります。各サブビューに触れるとき、それらをアニメートしたいと思います。スーパービューlayoutSubviewsは、サブビューのグリッドを作成するためにオーバーライドします。

問題は、アニメーションのサブビューのフレームを変更するたびに、スーパービューのlayoutSubviewsメソッドがフレームの上書きと呼ばれ、アニメーションが発生しないことです。

このシナリオでlayoutSubviewsが呼び出されるのはなぜですか?それを防ぐにはどうすればよいですか?

これに似た質問は他にもありますが、どれも適切に回答されていません。

ありがとう!

0 投票する
1 に答える
2736 参照

ios - layoutSubviews内のアニメーション?

次のメソッドで新しい要素の挿入/削除をサポートするビュー (LSTabBarView) があります。

LSTabItem は、モデル クラスを表すオブジェクトです。insertItem:atIndex:animated を使用して新しい要素が追加されるたびに、このモデル オブジェクト内の情報を使用して新しいサブビューが作成され (LSTabControl)、メイン ビューに追加され、最後に layoutSubviews が呼び出されて各フレームが再計算されます。サブビュー。

これらの操作を実装したばかりですが、「アニメーション化」パラメーターは今のところ使用されていません。

関連するメソッドは次のとおりです。

layoutSubviews が行うことは、基本的に、各サブビュー間にパディングを適用して、すべてのサブビューを線形水平シーケンスに次々と配置することです。各サブビューは、異なる幅または高さを持つことができます (固定サイズではありません)。アニメーションを YES に設定して新しい要素を追加すると (index=2 としましょう)、index+1 から numberOfElements までの各サブビューが右にシフトされ、新しいサブビューが利用可能な穴に表示されます。

明らかに LSTabBarView を拡張可能にしたいので、これらのメソッドの基本実装では、サブクラスによってサブビューがどのように配置されるかについて仮定を立てることはできません (たとえば、サブクラスが layoutSubviews をオーバーライドし、要素を水平レイアウトではなく垂直レイアウトに配置することを決定する場合があります)。その結果、新しい要素を追加するときに、各サブビューを右ではなく下にシフトすることにしました...)

アニメーションの実行方法を知りたくありません (方法は既に知っています) が、上記の要件を考慮して、新しいサブビューの外観をアニメーション化する正しいアプローチは何ですか。

すべてのアニメーションをlayoutSubviews内で実行するか、アニメーションコードをinsertItem/removeItem内に配置して、layoutSubviewsがサブビューレイアウトを計算できるようにすることを検討する必要がありますか?

ありがとう

0 投票する
1 に答える
2428 参照

ios - UIScrollViewコンテンツサイズクリッピングサブビュー(すべきでない場合)

動的にサイズ変更するサブビューがいくつか含まれているUIScrollViewがあります。サブビューのサイズ変更とレイアウトは問題なく実行できますが、スクロールビュー自体のコンテンツサイズを設定すると、下部のサブビューがクリップされます。スクロールビューのコンテンツサイズの高さが、それに含まれるビューの高さの合計よりも大きくなければならない理由はありますか?

これが私の状況の詳細です。いくつかのサブビューを含むUIScrollViewを含むスーパービューがあります。スーパービューのlayoutSubviewsメソッドでは、各サブビューの必要なサイズを計算してから、サブビューが画面の下に少しスペースを空けて垂直に並べて表示されるようにフレームを設定しました。完了したら、UIScrollViewのコンテンツサイズの高さを最後のサブビューの終わりに設定しました(origin.y + size.height)。理論的には、これは、スクロールビューのコンテンツ領域の下部が最後のサブビューの下部と正確に一致する必要があることを意味します。

しかし、そうではありません。代わりに、最後のサブビューの素敵なチャンクがクリップされます。それはまだそこにあります-下にスクロールすると、「バウンス」中に残りの部分が表示されます。ランドスケープモードでは、問題はさらに悪化します。下部のサブビューのはるかに大きな部分が表示されないだけです。

サブビューはすべて適切に配置および配置されています。問題は、UIScrollViewのcontentSizeが、サブビューの高さの合計(およびサブビュー間のスペース)よりも大幅に大きくする必要があるように見えることです。これは私には意味がありません。さらに、サイズが「オフ」になる量はさまざまです。このビューをさまざまなサブビューで数回再利用すると、すべて異なる量でオフになります。したがって、コンテンツビューの高さに定数を追加するだけでは役に立ちません。

コンテンツサイズ(または高さの計算)が正しく機能しない原因は何ですか?

コード: