7

ビューをスタンドアロンの Xib ファイルとして作成し、それらをインスタンス化してサブビューとして追加するのが好きです。

したがって、 を使用する場合UINavigationBar、最初にカスタム ビューを作成し (Xib から)、それをカスタム ビューとして に追加することで、同じことができると期待していましたUIBarButtonItem

UIBarButtonItem *anItem = [[UIBarButtonItem alloc] initWithCustomView:_myCustomView];

次に、ナビゲーション バーに追加します。

self.navigationBar.topItem.rightBarButtonItems = @[ anItem, anotherItem ];

ここまでは順調ですね。

現在、_myCustomViewAuto Layout (AL) を使用していますが、これで問題ないと思いました。そうではありません。私はほぼすべてを試しました。何も機能していません。ナビゲーションバーを持つコントローラーのサブビューとしてカスタムビューを追加してみました。ビュー階層の兄弟と考えて、AL はそれを の外側の通常のビューとして扱いますUINavigationBar

それもうまくいきませんでした。コントローラーupdateViewConstraintsが呼び出されましたが、適用されませんでした。ビューの最初のフレームは のままでしたCGRectZero。あたかも AL がビューが の上にありUINavigationBar、兄弟であることを認識し、レイアウトする必要がないと判断したかのようです。

bringSubviewToFrontもちろん、、、なども試しましtranslatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraintsた。後者は素敵を与えました:

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '-layoutSubviews の実行後も自動レイアウトが必要です。-layoutSubviews の MyNavigationBar の実装では、super を呼び出す必要があります。

問題は、Xib から AL を使用してカスタム ビューをロードし、これを に正常に設定した人customViewはいUIBarButtonItemますか? もしそうなら、どのように?

4

1 に答える 1

1

iOS Autolayout と UIToolbar/UIBarButtonItemsの複製のように見えます

UIBarButtonItemsから継承しないためUIView、それらの中で自動レイアウト ベースのカスタム ビューを使用することは完全にはサポートされていない可能性があります。問題が解決されるまで、自動レイアウト前の作業を行う必要があるようです。バグを報告することをお勧めします。

編集:自動レイアウト前のことで、ビューのフレームを直接操作することを意味します。

于 2014-08-14T23:01:12.923 に答える