[分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果
首先說一下思路:
想要達到底部控件隨著鍵盤的彈出而上移的效果,那么我們必然需要的到鍵盤在彈出時的高度,以及原點坐標。
說白了我們的大致思路就是,用view的高度-鍵盤彈出時的高度,得到的值就是底部控件與view底部之間的距離,在整個效果完成的過程中,我們只需要調整控件與底部之間的距離即可,而不是控件與鍵盤之間的距離,這是一個思路。
值得注意的是,隨著iphone6s以及plus的推出,iphone的鍵盤高度再也不是傳統固定的216,而是動態增加的。
所以,我要要得到鍵盤的高度及原點坐標,也就是fram,這就需要用通知對鍵盤實施監聽。
當然,還有一種思路也是大同小異,用通知監聽鍵盤frame,然后得到鍵盤的Y值和你的控件的最大Y值比較,如果鍵盤的frame的y值小于你控件最大的y值,就讓你的ui控件向上移動。
下面就來具體看看如何實現:
1.首先,我們在storyboard中找到這個底部控件outLayout的bottom約束,也就是找到這個控件與view底部的約束距離,如圖:
找到后,將這個約束在.m中關聯一個輸出口,這樣我們就得到一個全局的NSLayoutConstraint屬性,來控制這個控件的constraint,如圖:
2.最重要的一步,我們來完成實現view底部控件隨著鍵盤的彈出而上移的效果的方法
-(void)keyboardAppear:(NSNotification *)aNotification {NSDictionary * userInfo = aNotification.userInfo;CGRect frameOfKeyboard = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];CGRect frame = self.view.frame;CGFloat height = frame.size.height - frameOfKeyboard.origin.y + 64;//加64是因為存在navigation導致view本身就整體下移了64個單位self.bottomSpacingConstraint.constant = height; }上面這個方法中的思路我來解釋一下,首先我們聲明一個NSDictionary來儲存aNotification中的userInfo,可以簡單地說,aNotification中儲存著這個鍵盤中的所有被監聽的屬性信息,具體有什么內容可以自己講其打印出來查看。然后,我們再分別獲取到鍵盤和view的frame,最重要的地方來了,也是整個方法的核心思路:就是用view的高度減去鍵盤的y值,那么得到的就是鍵盤的最上面的點和view底部的間距,這也就是我們想要得到的控件上移時與view底部的距離,由于我們在storyboard中設置了outLayout的底部約束,所以,只要將我們最開始聲明的全局NSLayoutConstraint屬性(也就是底部約束)的constant重新賦值成我們得到的間距,就完成了這種效果的生成條件。
3.完成上述步驟后,我們在viewDidLoad中聲明如下兩個通知,如下:
//鍵盤彈出時 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAppear:) name:UIKeyboardWillShowNotification object:nil]; //鍵盤消失時 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAppear:) name:UIKeyboardWillHideNotification object:nil];在鍵盤彈出時,我們調用keyboardAppear方法,由于鍵盤彈出,我們得到的是彈出的鍵盤的y與view底部的間距,當鍵盤撤銷時,我們得到的同樣是撤銷后的鍵盤的y(也就是0,因為已經消失了,高度為0)與view底部的間距。
我寫這些博客的目的,是希望大家看了之后能得到一些思路上的啟發,而不是單純的機械記方法和寫代碼,程序是靠思路去創造的,望諸君共勉。
最后,我們來看一下運行后的效果:
總結
以上是生活随笔為你收集整理的[分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男人梦到儿子丢了预示什么
- 下一篇: Css3之基础-5 Css 背景、渐变属