Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使以模式显示的UIViewController的UIView始终显示在屏幕底部?_Ios_Objective C_Uiview_Uiviewcontroller_Modal Dialog - Fatal编程技术网

Ios 如何使以模式显示的UIViewController的UIView始终显示在屏幕底部?

Ios 如何使以模式显示的UIViewController的UIView始终显示在屏幕底部?,ios,objective-c,uiview,uiviewcontroller,modal-dialog,Ios,Objective C,Uiview,Uiviewcontroller,Modal Dialog,在我的项目中,我将有两个视图控制器,一个在底部有一个大的UIView子视图(这是我的图表中的视图控制器1),当用户点击这个UIView时,它将向上移动以显示第二个视图控制器的视图。这很像iOS版谷歌地图中的兴趣点视图。当你搜索一个地方时,它会在屏幕底部显示一个小视图,当与之交互时,该视图会展开以填充屏幕-这就是我想要做的 所以我的问题是,实施这一计划的最佳方式是什么?最终,它看起来很像是以模式呈现UIViewController,只是它的UIView始终存在,尽管大小不同 多谢各位 我只需要使

在我的项目中,我将有两个视图控制器,一个在底部有一个大的UIView子视图(这是我的图表中的视图控制器1),当用户点击这个UIView时,它将向上移动以显示第二个视图控制器的视图。这很像iOS版谷歌地图中的兴趣点视图。当你搜索一个地方时,它会在屏幕底部显示一个小视图,当与之交互时,该视图会展开以填充屏幕-这就是我想要做的

所以我的问题是,实施这一计划的最佳方式是什么?最终,它看起来很像是以模式呈现UIViewController,只是它的UIView始终存在,尽管大小不同

多谢各位


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

我认为您不需要两个单独的视图控制器。您只需在
UIViewController
中定制一点您的
UIScrollView

首先,您需要设置scrollView的ContentSize。然后,您需要防止您的
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;
其次,将需要完全显示在屏幕上的
uiapgesturecognizer
添加到
UIView
。下面是一段您可以使用的代码

  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,但您可以使用动态高度值,具体取决于您正在运行的设备。不要忘记在第二个视图中设置用户交互启用


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

不能是模式视图,因为你会失去上一个视图的交互,再加上除了iPad上的popover之外的任何东西,视图控制器都是全屏的。考虑在同一个视图控制器上创建一个子UIVIEW。使用手势识别器来控制动作。太好了,谢谢。我会在周末尝试这个,然后我会来接受这个答案。@mMo,你试过了吗?很高兴知道,快乐编码:)