[英]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.