これはよくある問題だと思います。UINavigationバーを備えたUIViewControllerとContentView(UIViewと一連の子コントロールを含む)があります。ユーザーは左にスワイプしてこのコンテンツビューを非表示にし、画面の左側からアニメーション化できます。ナビゲーションが必要です。バーを展開して幅全体を埋めます。これら2つをInterfaceBuilderとリンクすることはできないため、コードで行う必要があります。問題ありません。
// Called from viewWillAppear
-(void)addLayoutConstraints{
UINavigationBar *navigationBar = self.navigationBar;
UIView *facetView = self.facetViewController.view;
NSDictionary *views = NSDictionaryOfVariableBindings(navigationBar, facetView);
NSArray* constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-[facetView]-[navigationBar]-|"
options:NSLayoutFormatAlignAllBaseline
metrics:nil
views:views];
[self.view addConstraints:constraints];
}
切り取られたそのコードはそれをうまくやるはずです。問題は、UINavigationBarをIBにレイアウトして、カスタマイズしたボタンを簡単に追加して表示できるようにすることです。問題は、ナビゲーションバーをIBにレイアウトすると、IBが大量のナビゲーションバーを追加することです。削除できないデフォルトの制約。そのうちの1つは、上記のコードで追加したものと競合しています。
これをどのように回避しますか?これが私が思いついた3つの可能性です:
1.)プログラムでUINavigationバーを作成することもできます。このように、私が追加した制約のみがあります。私はこのようにしたくないのですが、それはオプションです
2.)IBを使用して、デフォルトの制約を削除して、衝突しないようにします。これを行う方法がわかりません
3.)コードで、IBがUINavigationバーに追加するデフォルトの制約を削除してから、カスタム制約を追加します。removeConstraintとremoveConstraintsがあることがわかります。制約を取得して削除してから、独自の制約を追加できると思います。繰り返しますが、ちょっと長い厄介なプロセスです。
あなたの意見は何ですか?あなたは同じようなことをしましたか?