0

ページの下部に表示されるアラート/通知バーを実装しようとしています。クリックすると上にスクロールして画面全体をカバーします (Kayak または PageOnce アプリが表示するように)。現在の様子です (以下の URL に画像をアップロードしました)。

下部のアラート バーを示す画像 http://www.anony.ws/hLe

アラート バーがオープンしました http://www.anony.ws/hLl

機能しますが、完全ではありません。1 つには、アラート ビューはナビゲーション バーを覆うことができません (開いたビューの添付のスクリーンショットでは、アラート フレームの原点 y は 0 です)。フレームの y を負にしてさらに上に移動すると、ビューはナビゲーション バーの後ろに移動します。アラート ビューが画面全体 (ナビゲーション バーを含む) をカバーするようにするにはどうすればよいですか。

これが私がやったことです:

  1. 「メンバー センター」ビュー コントローラーの 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];
    
  2. 私の表示/非表示コードは 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;
        }];
    
    }
    }
    

私はそれを正しく実装していないと感じています。そのような機能を実装するための最良の方法を教えてください。

4

2 に答える 2

0

アラート ビューが開いているときにナビゲーション バーを非表示にし、アラート ビューが閉じているときに再度表示することができます。

隠れる :

[self.navigationController setNavigationBarHidden:YES animated:NO];

表示する:

self.navigationController setNavigationBarHidden:NO animated:NO];

それが役に立てば幸い。

于 2012-12-18T07:56:36.073 に答える
0

現在のビューではなく、以下のようにアラート ビューをナビゲーション コントローラー ビューに追加します。

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.navigationController.view addSubview:av];
于 2012-12-18T08:01:41.257 に答える