ページの下部に表示されるアラート/通知バーを実装しようとしています。クリックすると上にスクロールして画面全体をカバーします (Kayak または PageOnce アプリが表示するように)。現在の様子です (以下の URL に画像をアップロードしました)。
下部のアラート バーを示す画像 http://www.anony.ws/hLe
アラート バーがオープンしました http://www.anony.ws/hLl
機能しますが、完全ではありません。1 つには、アラート ビューはナビゲーション バーを覆うことができません (開いたビューの添付のスクリーンショットでは、アラート フレームの原点 y は 0 です)。フレームの y を負にしてさらに上に移動すると、ビューはナビゲーション バーの後ろに移動します。アラート ビューが画面全体 (ナビゲーション バーを含む) をカバーするようにするにはどうすればよいですか。
これが私がやったことです:
「メンバー センター」ビュー コントローラーの viewDidLoad で、新しいビュー (私の AlertView) を作成し、そのフレームを下部に表示するように変更してから、現在のビューにサブビューとして追加しています。
CGFloat alertBarHeight = 25; CGRect frame = self.view.frame; frame.origin.y = frame.size.height - alertBarHeight; AlertsView *av = [[AlertsView alloc] initWithFrame:frame withController:self height:alertBarHeight]; // Its a custom init method that just stores a reference to the invoking controller [self.view addSubview:av];
私の表示/非表示コードは AlertsView.m にあり、次のようになります。
- (void) showOrHideAlerts:(id)sender { if (self.isOpen) { // Close the alerts view [UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ CGRect frame = self.frame; frame.origin.y = self.invokingController.view.frame.size.height - self.barHeight; self.frame = frame; } completion:^(BOOL finished) { self.isOpen = NO; }]; } else { // Show the alerts view [UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ CGRect frame = self.frame; frame.origin.y = 0;// - [self.invokingController.navigationController navigationBar].frame.size.height; //frame.origin.y = 20; self.frame = frame; } completion:^(BOOL finished) { self.isOpen = YES; }]; } }
私はそれを正しく実装していないと感じています。そのような機能を実装するための最良の方法を教えてください。