繁体   English   中英

如何以模态方式呈现的UIViewController的UIView总是出现在屏幕的底部?

[英]How to have a UIView of a UIViewController that will be presented modally always be present at the bottom of the screen?

在我的项目中,我将有两个视图控制器,一个在底部有一个大的UIView子视图(这是我的图中的视图控制器1),当用户点击这个UIView时,它会向上移动以显示第二个视图控制器的观点。 这非常类似于Google Maps for iOS中的兴趣点视图。 当你搜索一个地方时,它会在屏幕底部显示一个小视图,然后在与之交互时展开以填充屏幕 - 这实际上是我想要做的。

所以我的问题是,实现这个的最佳方法是什么? 最终它似乎很像呈现UIViewController模式,除了它的UIView总是存在,虽然大小不同。

谢谢

在此输入图像描述

在此输入图像描述

我只想使用一个视图控制器,并使下视图成为它的子视图。 当您在主视图中检测到点按时,您可以向上滑动底部视图,并根据需要调整两个视图的大小和位置。

我认为你不需要两个独立的视图控制器。 您需要做的就是在UIViewController自定义一些UIScrollView

首先,您需要设置scrollView的setContentSize。 然后,您需要阻止UIScrollView滚动,因为您不希望它滚动。

  self.scrollView =[[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
  self.scrollView.delegate = self;
  self.scrollView.contentSize = CGSizeMake(320, 568 + x  ); // x represents the height of white screen in your first view controller.
  self.scrollView.bounces = NO;
  self.scrollView.scrollEnabled = NO;

其次,向UIView添加一个UITapGestureRecognizer ,它需要完全显示在屏幕上。 这是您可以使用的一段代码

  UITapGestureRecognizer *tapGestureRecognizer =
      [[UITapGestureRecognizer alloc] initWithTarget:self
                                              action:@selector(tapped:)];
 tapGestureRecognizer.numberOfTapsRequired = 1;
 [view addGestureRecognizer:tapGestureRecognizer];

最后,您可以通过更改UIScrollView contentOffset来实现tapped方法,以在屏幕上显示全新的UIView 别忘了消失导航栏。 所以,

- (void)tapped{
  self.navigationController.navigationBarHidden = YES;
  [self.scrollView setContentOffset:CGPointMake(0,view1.frame.origin.y) animated:YES];
}

好吧,最后,你完全在屏幕上显示你的第二个视图。 假设您使用的iPhone> 5,我使用静态值,但您可以根据您正在运行的设备使用动态高度值。 不要忘记在第二个视图中设置setUserInteractionEnabled

我的错误我认为你不想导航栏,但不是什么大不了的,只需要改变setContentOffset y值而不使用navigationBarHidden属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM