我正在尝试实现将出现在页面底部的警报/通知栏,单击时将向上滚动并覆盖整个屏幕(就像 Kayak 或 PageOnce 应用程序显示它一样)。这是它现在的样子(已在以下 URL 上传图片):
图片显示底部的警报栏 http://www.anony.ws/hLe
警报栏打开 http://www.anony.ws/hLl
它有效但不完全。一件事,警报视图无法覆盖导航栏(警报框架的原点 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; }]; } }
我觉得我没有正确实施它。请指导我实现此类功能的最佳方式。