日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果

發布時間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [分享]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底部控件随着键盘的弹出而上移的效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。