簡體   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