問題タブ [uiview-hierarchy]
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 - iOS の「異なる」ビュー階層にアンカーがあるため、Auto Layout 制約がクラッシュしますが、
私は完全にプログラム化されたSwift 4.1を使用してiOS 11.Xアプリで作業しています。Xcode 9.4 の使用
回転をサポートして、ビューの上部までの距離が 10 ポイントの中央 (水平方向) にビューを配置しようとしています。
アプリのアーキテクチャには、次のような通常のものがあります (ストーリーボードはありません)。
- UIWindow オブジェクトと UINavigationController をルートとする AppDelegate
- navigationController には rootViewController として UIViewController() があります
ランドスケープ モードではstatusBar
が表示されないため、自動レイアウト構成を簡素化するために、次のように にトップ アンカーを追加することにしましたnavigationBar
(コードはわかりやすくするために簡略化されています)。
結果は予想通り。うまく回転し、アプリが横向きまたは縦向き (デバイスとシミュレーターの両方) で起動された場合にも正常に動作します。
今。GitHub での FastForward 1 コミット、全体的な App View アーキテクチャに変更はなく、同じコードでも、次のメッセージが表示されてクラッシュします
*** NSGenericException', reason: '共通の祖先がないため、アンカーを使用して制約をアクティブ化できません。制約またはそのアンカーは、異なるビュー階層の項目を参照していますか? それは違法です。
ここで何が起こっているのか、何か考えはありますか?. 以前の GitHub コミットから .zip をダウンロードして分離し、動作することを再確認しました!!. しかし、現在のコミットは、これに関連するコードを変更せずに失敗しますUILabel
。
navBar はUIWindow
-> UILayoutContainerView
->の一部ですUINavigationBar
- Xcode が NSLayoutYAxisAnchor アンカーについて不平を言うのはなぜですか? (centerX と top アンカーしかありません)
- 以前のコミットで navBar.bottomAnchor への label.topAnchor が機能するのはなぜですか (同じビュー階層にないにもかかわらず)?
ios - ビュー コントローラの複数インスタンスの作成を避ける
複数のボタンを持つカスタム ナビゲーション バーを作成したカスタム ビュー コントローラーがあります。そのカスタム ビュー コントローラーを複数の子コントローラーの親として使用しました (複数のコントローラーで同じナビゲーション バーを使用するため)。いくつかのボタンクリック。問題は、そのボタンをクリックするたびにそのビューコントローラーのインスタンスが作成されることです。そして、同じコントローラーが表示されます。
これは、メニュー ボタン クリックのアクションです。
これは戻るボタンのクリックに対するアクションです:
viewController.view.window を試しましたが、ボタンを押すたびに baseViewController の新しいインスタンスが作成されるという問題があります。
このシナリオでコントローラーが既に提示されていることを知る方法。