ビューをスタンドアロンの Xib ファイルとして作成し、それらをインスタンス化してサブビューとして追加するのが好きです。
したがって、 を使用する場合UINavigationBar
、最初にカスタム ビューを作成し (Xib から)、それをカスタム ビューとして に追加することで、同じことができると期待していましたUIBarButtonItem
。
UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];
次に、ナビゲーション バーに追加します。
self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];
ここまでは順調ですね。
現在、_myCustomView
Auto Layout (AL) を使用していますが、これで問題ないと思いました。そうではありません。私はほぼすべてを試しました。何も機能していません。ナビゲーションバーを持つコントローラーのサブビューとしてカスタムビューを追加してみました。ビュー階層の兄弟と考えて、AL はそれを の外側の通常のビューとして扱いますUINavigationBar
。
それもうまくいきませんでした。コントローラーupdateViewConstraints
が呼び出されましたが、適用されませんでした。ビューの最初のフレームは のままでしたCGRectZero
。あたかも AL がビューが の上にありUINavigationBar
、兄弟であることを認識し、レイアウトする必要がないと判断したかのようです。
bringSubviewToFront
もちろん、、、なども試しましtranslatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraints
た。後者は素敵を与えました:
キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '-layoutSubviews の実行後も自動レイアウトが必要です。-layoutSubviews の MyNavigationBar の実装では、super を呼び出す必要があります。
問題は、Xib から AL を使用してカスタム ビューをロードし、これを に正常に設定した人customView
はいUIBarButtonItem
ますか? もしそうなら、どのように?