[解決済み] viewWillAppear: と viewDidAppear の間でビューフレームが変化する。
質問
私のアプリケーションで奇妙な挙動を発見しました。
IBOutlet
への呼び出しの間にその接続されたビューのフレームがある、という奇妙な挙動を発見しました。
viewWillAppear:
と
viewDidAppear:
. 以下は、私の
UIViewController
サブクラスでの関連するコードです。
-(void)viewWillAppear:(BOOL)animated {
NSLog(@"%@", self.scrollView);
}
-(void)viewDidAppear:(BOOL)animated {
NSLog(@"%@", self.scrollView);
}
と、その結果のログ出力です。
MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 0; 0 0); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>
MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 44; 320 416); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>
これは、2つの呼び出しの間でフレームが変化していることを明確に示しています。のビューでセットアップを行いたいと思いました。
viewDidLoad
メソッドでビューのセットアップを行いたかったのですが、コンテンツが画面上に表示されるまで私が変更できないのであれば、それはかなり無駄のように思われます。何が起こっているのでしょうか?
どのように解決するのですか?
Autolayout
は、ビューの GUI を設計および開発する方法に大きな変化をもたらしました。主な違いの 1 つは
autolayout
はビューのサイズをすぐに変更するのではなく、トリガーされたとき、つまり特定の時間にのみ変更しますが、制約をすぐに再計算するように強制したり、レイアウトが必要なものとしてマークしたりすることができることです。これは次のように動作します。
-setNeedDisplay
.
私にとっての大きな挑戦は、オートサイズ・マスクをもう使う必要がないこと、そしてフレームがビューの配置に無用なプロパティになっていることを理解し、受け入れることでした。ビューの位置について考える必要はもうありませんが、互いに関連する空間でそれらをどのように見たいかを考える必要があります。
旧来のオートレジマスクとオートレイアウトを混在させる場合は、問題が発生するときです。オートレイアウトの実装を早急に検討し、オートレイアウトに基づくビュー階層において、古いアプローチを混在させないようにしなければなりません。
ビューコントローラのメインビューのように、オートサイジングマスクのみを使用するコンテナビューがあっても構いませんが、混在させないようにしたほうがよいでしょう。
ストーリーボードは使ったことがないのですが、おそらく正しいのでしょう。Autolayoutを使用すると、オートレイアウトエンジンが計算を開始するときに、ビューのフレームが設定されます。同じことを
- (void)viewDidLayoutSubviews
メソッドの super の直後に同じことを聞いてみてください。
このメソッドは、オートレイアウトエンジンがビューのフレームを計算し終えたときに呼び出されます。
関連
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み】「推奨アイコンファイルがありません - バンドルには、ちょうど「120x120」ピクセル、.png 形式の iPhone / iPod Touch 用のアプリアイコンが含まれていません。
-
[解決済み] iPhone Safari ウェブアプリでリンクを新しいウィンドウで開く
-
[解決済み] エラー : サービスは無効です
-
[解決済み] UIViewControllerの上にclearColor UIViewControllerを表示する
-
[解決済み] Xcodeで非推奨の警告を抑制する
-
[解決済み] ナビゲーションコントローラスタック、サブビュー、モーダルコントローラを使用せずに、ビューコントローラの変化をアニメーション化する?
-
[解決済み] アプリを提出する前にitunesのリンクを取得する
-
[解決済み] iPhone-Portrait-NumberPadキーボードでタイプ4をサポートするキープレインが見つからない; 3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用
-
[解決済み] CALayersを使ったUIViewの丸め方 - 角の一部だけ - How?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UIScrollViewでスクロールの方向を見つける?
-
[解決済み] APNSの.pemファイルを作成する?
-
[解決済み] iOS UITableViewのHeaderView(セクションヘッダーではない)を追加する
-
[解決済み] iosアプリの最大メモリ使用量
-
[解決済み] iOSでHTMLをNSAttributedStringに変換する
-
[解決済み] iOSアプリでドキュメントフォルダ内にフォルダを作成する
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] テーブルビューの行をプログラムで選択する
-
[解決済み] CALayerのanchorPointを変更すると、ビューが移動します。
-
[解決済み] カメラロールに画像を保存する方法を教えてください。