私はfacebookのようなサイドメニュー付きのアプリケーションを作成しました。私は自分自身の上にビューを追加するルートビューコントローラを持っています。そして、ユーザが 'メニュー'ボタンを押すと、ビューをスライドさせてメニューを見ることができます。UINavBarは他のボタンよりも目に見えないレイヤーを持っているようです。
私の問題は、ビューが最初にロードされるとき、UINavBarが約20ピクセルかそれ以下であるように見えるということです。これは、自動的に自分自身を調整し、モーダル遷移が完了したときだけで、ステータスバーの下に移動
(下の画像は、それがモーダル左右反転であるため、ビットはオフ中心見えます)。ここで
私は、「メニュー」ボタンを押したときに何が起こるかのスクリーンショットです。それは右の上平面図をスライド
私は赤に設定し、左矢印と右矢印のフレームの背景を持っている上に、私はどこクリッカブル/タップ可能な地域を見ることができるように、あなたが画像で見ることができるよう
です。青い線をクリックすると青い線が引かれ、青い線をクリックすると上の矢印が表示されません。左側の同じ一般的な領域をクリックすると、メニューボタンがトリガーされます。私はシミュレータとモバイルデバイスの両方でこれを再現することができます(私はボタンを指で操作していません)。
ナビゲーションバーがロードされているので、それがiPhoneに想定しているよりも低いが、私はそれがまだメニューをトリガされUIButton
枠内をクリックしたときに、それはそう、その位置のままであると考えていることを私には思えます矢印セレクタをトリガしません。矢印の途中で直接タップすると、矢印セレクタがトリガされますが、画像の外に少しだけ表示されると、矢印セレクタはトリガされません。ここで
は私のRootViewController
のviewDidLoad
AppointmentViewController *appointmentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentViewController"];
NSLog(@"B: %@",NSStringFromCGRect(appointmentViewController.view.frame));
self.navController = [[UINavigationController alloc] initWithRootViewController:appointmentViewController];
NSLog(@"B2: %@",NSStringFromCGRect(appointmentViewController.view.frame));
NSLog(@"Nav Bounds: %@",NSStringFromCGRect(self.navController.view.frame));
NSLog(@"Bounds: %@",NSStringFromCGRect(self.contentView.bounds));
self.navController.view.frame = self.contentView.bounds;
NSLog(@"Nav Bounds2: %@",NSStringFromCGRect(self.navController.view.frame));
[self addShadowToMenu];
[self.contentView addSubview:self.navController.view];
RootViewControllerログ
2012-04-30 12:24:44.533 My-App[19929:fb03] B: {{0, 20}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] B2: {{0, 20}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds: {{0, 0}, {320, 480}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Bounds: {{0, 0}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds2: {{0, 0}, {320, 460}}
AppointmentViewController
self.title = [dataObj.preferences objectForKey:@"appts_name_plural"];
self.navigationItem.title = self.title;
dayView = [[APCalendarDayView alloc] initWithCalendarView:(APCalendarView *)self];
APListView = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentListView"];
APListView.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
SideMenuView *myDelegate = [[SideMenuView alloc] init];
[self setSideMenuDelegate:myDelegate];
//set the delegate's currentViewController property so that we can add a subview to this View.
[sideMenuDelegate setCurrentViewController:self];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *today = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStyleBordered target:nil action:@selector(todayPressed)];
NSArray *appointmentNavigationItems = [[NSArray alloc] initWithObjects:@"Day",@"List",@"Month", nil];
navcontrol = [[UISegmentedControl alloc] initWithItems:appointmentNavigationItems];
[navcontrol setSegmentedControlStyle:UISegmentedControlStyleBar];
[navcontrol addTarget:self action:@selector(appointmentNavigationClicked:) forControlEvents:UIControlEventValueChanged];
[navcontrol setSelectedSegmentIndex:0];
UIBarButtonItem *segmentItems = [[UIBarButtonItem alloc] initWithCustomView:navcontrol];
NSArray *items = [NSArray arrayWithObjects:today,flexSpace,segmentItems, flexSpace, nil];
[appointmentToolbar setItems:items animated:NO];
[appointmentToolbar setAutoresizesSubviews:YES];
[[self.view superview] addSubview:myDelegate.view];
[self setViewSizeOffset:(appointmentToolbar.bounds.size.height)];
CalendarDayView
ですheaderView
をさらに遠ざけると、赤い領域のどこかを選択して矢印セレクタをトリガーすることができます。しかし、私はAppleのカレンダーと一致し、ナビゲーションバーのすぐ下にあるようにします。
ナビゲーションバーがheaderView
の上部をタップしないようにする理由を知っていますか?クリアされるために、ブロックされているheaderViewの部分は、青い線の上から上に向かっています。赤い背景を持つUIButton
は、フレームに関連付けられたアクションを持っているため、イベントがトリガーされるはずですが、navbarがUIButton
の半分をタップしているのをブロックしているようです。
投稿した最初のコードスニペットから、コンテンツビューの境界とnavコントローラのフレームの両方を記録できますか? NSStringFromCGRectを使用して、コンソールに印刷できる標準文字列を取得します。 – Sam
@Samバインドされたログを含めるようにOPを編集しました – Bot