問題タブ [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.
ios - iOS8 ベータ 3 UITableViewCell レイアウトサブビューの無限ループ
iOS8 で導入された自動サイズ変更可能なテーブル ビュー セルがありました (WWDC セッション 226 テーブル ビューとコレクション ビューの新機能)。私のプロジェクトでは、古い固定行の高さの動作を実装しようとしています。また、私にとって最も重要なことはcell.contentView、左右に余白のあるデフォルトのフレームを挿入することです。そのため、プロパティを変更するcell.contentView.frameと、その直後に-[cell setNeedsLayout]メソッドが呼び出され、セルが無限layoutSubviewsループに陥ります。
再現する手順:
新しいシングル ビュー プロジェクトを作成し、デフォルトのビュー コントローラーをテーブル ビュー コントローラーに置き換えます
テーブル ビューの自動高さ計算を無効にする
-(void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedRowHeight = 0;
self.tableView.rowHeight = 44;
}
3. ストーリーボードのテーブル ビューにカスタム セルをドロップします。
サブビューをカスタム セルに追加します:
,セルをサブクラス化し、 を変更
contentView.frameしますlayoutSubviews。ビルドして実行します。
結果: シミュレーターは、無限のレイアウト サブビュー ループでスタックした黒い画面で終了します。
期待される結果:contentViewカスタム フレームを持つセルを含むテーブル ビューを表示するシミュレーター。
コメント: 少しデバッグしているときに、セルにカスタム サブビューがドロップされていなければ、無限ループを回避できることがわかりました。そのため、次の条件を満たすとバグが発生するようです。
self.tableView.estimatedRowHeight = 0; self.tableView.rowHeight = 44;cell.contentView.frame = CGRectMake(...)cell have custom subviews dropped on it in xib or storyboard
Apple は iOS8 の「既知の問題」リストに問題を抱えていないので、実際には iOS8 のバグなのか、それとも問題の解決方法を知っている人がいるのだろうか?
ios - UIView/CALayer: Transform はスーパービューで layoutSubviews をトリガーします
UIView のいくつかのプロパティを変更すると、スーパービューlayoutSubviewsでトリガーされます。ドキュメントでこれに関する声明を見つけることができません。
これらのプロパティは、スーパービューとセルフでレイアウトをトリガーします
- フレーム
- 境界
これらのプロパティは、スーパービューでのみレイアウトをトリガーします
- 変身
- レイヤー変換
これらのプロパティは、自分自身でのみレイアウトをトリガーします
- なし
これらのプロパティはレイアウトをトリガーしません
- 中心
- layer.anchorPoint
- レイヤーの位置
- アルファ
transform がレイアウトをトリガーし、その位置と anchorPoint がそうでないことは非常に混乱しています。
コード例: https://github.com/hfossli/LayoutSubviewsInconsistency
私は知りたいです:
- なぜこの動作が見られるのか
- これが本当に矛盾している場合、またはいくつかのコアコンセプトを誤解している場合
- トランスフォームを変更するたびにスーパービューをレイアウトサブビューにしないようにする方法
これについては、ドキュメントにもヘッダー ファイルにも何も見つかりません。UIDynamics などを使用する場合、この問題は重大です。
swift - Swift - UIBezierPath 呼び出しで余分な引数 'radius'
Objective-C Library ( STKSpinnerView ) を Swift に適応させていましたが、このエラーを解決できません:
Appleが言うような方法を使用する場合、「半径」が追加の引数である理由がわかりません...解決方法を知っていますか? ありがとう!
ios - Swift: setNeedsLayout によって layoutSubviews が呼び出されない
私は、サブビューとして3 を持つbackgroundも持っています。ユーザーがビューを左にドラッグすると、対応するビューが水平方向に拡大することを期待して、それぞれにa を追加しました。私のコードは次のとおりです。UIViewUIViewsUIPanGestureRecognizerUIView
そして、layoutSubviews()私が持っている呼び出しで:
かなり単純ですが、どういうわけか機能せず、何が問題なのかわかりませんでした。私も試してみましself.view.setNeedsLayout()たが、運もありません。※labelbgはUIViews ではなくUILabels です。
前もって感謝します!
ios - layoutSubviews では、セル境界またはフレームを設定する必要がありますか?
セルを 0 の位置に配置したいのはわかっているので、セルframeをに設定するのが怖いのですが、位置がわかりません。しかし、セルの のみを設定すると、セルが から「移動」するなど、奇妙な効果が生じることがあります。layoutSubviewsorigin.xorigin.yboundssizecollectionView
layoutSubviews でフレームまたはバンドを何に設定しますか?
ios - バックグラウンド スレッドで viewWillLayoutSubviews が実行されるのは、どのような場合ですか?
アプリケーションで稀に発生するクラッシュを検出しました。スタック トレースは役に立ちませんでした。それは私のコードに直接関係していません:
したがって、クラッシュの詳細を調べるために、デバッグ情報を追加しようとしました。への痕跡を見つけることができましたviewWillLayoutSubviews。バックグラウンドで呼び出されています。バックグラウンドにあることを検出した場合は、関数を終了できます。しかし、これは汚いハックです。「 thingsviewWillLayoutSubviews 」がバックグラウンドスレッドでアプリを呼び出さないようにすることで、正しく修正したいと考えています。
スタックトレースが役に立たないため、これらの「もの」をまだ見つけることができませんでした。
それらの「もの」とは何でしょうか?
ios - iOS 8 GM の無限ループでの layoutSubviews
私のアプリは a をサブクラス化し、次のようにセルの幅を変更するためにUITableViewCell実装します。layoutSubviewscontentView
このコードを iOS 8 シミュレーターと Xcode 6 GM シードで実行すると、無限ループがトリガーされます。ただし、iOS 8 GM シードを実行している実際の iPhone または iPad で実行すると、以前のバージョンの iOS のようにループしません。
最初は違いはコンパイラの最適化だと思っていましたが、シミュレーターはデバッグ構成とリリース構成の両方でループします。
質問
- iOS 8 GM とシミュレーターの違いはなぜですか?
- これは重大なバグ修正ですか? デバイスで再現できなくても、潜在的に深刻なハング バグを示すアプリをリリースするのは非常に気が進まない.
- iOS 7 および 6 でリグレッションを引き起こすことなくループを排除するためにこれをリファクタリングする最良の方法は何だと思いますか?
ios - レイアウトサブビューの後に制約を更新するには?
ビューのレンダリングには、次の 3 つの手順がこの順序であることがわかっています。
- 制約の更新
- レイアウト ビュー (ここでフレームの計算を取得します)
- 画面
カスタムボタンの高さを変更し、そのボタンに周囲のビューとの制約がある場合、その制約を更新してビューとの重複を避けるにはどうすればよいですか? コメント行が表示されますが、どれも機能しません。
objective-c - UITableViewCell の IBOutlet プロパティに接続されたビューはフレームを変更できません
クラス A 、 のサブクラスがありUITableViewCell、その IBOutlet プロパティtitleLabelをストーリーボードの UILabel にリンクしました。のフレームを変更できないようですtitleLabel。
のコードも実行しますが- (void)layoutSubviews、機能しません。
ややこしいのですが、端末で起動しているアプリでCellをタップすると位置が変わってしまい、titleLabelusingコードを作ってフレームを変えればOKです。
誰でも私を助けることができます..