在自定義鍵盤的時候,碰到要根據(jù)橫豎屏,然后改變自定義鍵盤高度的需求,但是發(fā)現(xiàn),無論使用autolayout還是設(shè)置frame去改變高度,都沒有反應(yīng)。后面經(jīng)過查閱,才知道有個Intrinsic Content Size屬性??梢栽O(shè)置視圖的自定義大小。
創(chuàng)新互聯(lián)公司專注于荷塘企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都商城網(wǎng)站開發(fā)。荷塘網(wǎng)站建設(shè)公司,為荷塘等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
關(guān)于 intrinsicContentSize 及 約束優(yōu)先級/content Hugging/content Compression Resistance的詳解,參考如下博客:
下面是自己的簡單記錄:
改變自定義鍵盤的高度可以設(shè)置鍵盤View的視圖Intrinsic Content Size屬性。
先設(shè)置屬性:
然后再調(diào)用方法:
大概demo如下:
在蘋果手機(jī)的鍵盤設(shè)置內(nèi),進(jìn)入到鍵盤高度功能內(nèi)向上拖動,即可調(diào)節(jié)蘋果手機(jī)鍵盤的大小。
工具/原料:iPhone12、ios14.1.7。
1、點(diǎn)擊工具箱。選擇輸入法右上角的工具箱圖標(biāo)。
2、點(diǎn)擊鍵盤高度。選擇鍵盤高度的圖標(biāo)進(jìn)入。
3、設(shè)置大小。向上拖動設(shè)置鍵盤的大小。
4、點(diǎn)擊完成。選擇下方的完成選項即可。
在ios開發(fā)時我們會遇到鍵盤高度無法適應(yīng)的問題,這時候該怎么解決呢?下面由我教大家怎么解決iOS中的鍵盤高度變化的問題。
? ? 完美解決iOS中的鍵盤適應(yīng)高度變化的 方法
#pragma mark - reg unreg notification
- (void)regNotification
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
- (void)unregNotification
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
}
#pragma mark - notification handler
- (void)keyboardWillChangeFrame:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;
CGRect inputFieldRect = self.inputTextField.frame;
CGRect moreBtnRect = self.moreInputTypeBtn.frame;
inputFieldRect.origin.y += yOffset;
moreBtnRect.origin.y += yOffset;
[UIView animateWithDuration:duration animations:^{
self.inputTextField.frame = inputFieldRect;
self.moreInputTypeBtn.frame = moreBtnRect;
}];
}
通過獲取鍵盤消息的開始狀態(tài)、結(jié)束狀態(tài),以及變化周期,可以計算出具體的Y偏移,從而在相同時間里做相同偏移量。
猜你喜歡:
2. 怎樣把電腦上的照片導(dǎo)入iphone
3. iphone照片怎么導(dǎo)入電腦
4. 電腦ipad模擬器的安裝方法
5. 安卓程序員必備的開發(fā)工具
6. iPhone5s怎么刷機(jī)
鍵盤高度是一個非固定值,以前都是216,但是現(xiàn)在由于介入太多的第三方鍵盤,高度五花八門,所以你只能通過鍵盤彈出的監(jiān)聽來獲取鍵盤高度。
監(jiān)聽當(dāng)鍵盤將要出現(xiàn)時
OC版
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(keyboardWillShow:)name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:selfselector:@selector(keyboardWillHide:)name:UIKeyboardWillHideNotification object:nil];
- ( void )keyboardWillShow:(NSNotification *)notification
{
//? ? //獲取鍵盤的高度
//? ? NSDictionary *userInfo = [notification userInfo];
//? ? NSValue *value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
//? ? CGRect keyboardRect = [value CGRectValue];
//? ? int height = keyboardRect.size.height;
CGFloatcurkeyBoardHeight = [[[notificationuserInfo]objectForKey:@"UIKeyboardBoundsUserInfoKey"]CGRectValue].size.height;
? ? ? CGRectbegin = [[[notificationuserInfo]objectForKey:@"UIKeyboardFrameBeginUserInfoKey"]CGRectValue];
? ? ? CGRectend = [[[notificationuserInfo]objectForKey:@"UIKeyboardFrameEndUserInfoKey"]CGRectValue];
? ? // 第三方鍵盤回調(diào)三次問題,監(jiān)聽僅執(zhí)行最后一次
? ? if (begin.size.height0 (begin.origin.y-end.origin.y0)){
? ? ? CGFloatkeyBoardHeight = curkeyBoardHeight;
? ? ? NSLog(@"第三次:%f",keyBoardHeight);
? ? ? ? [UIView? animateWithDuration:0.05 animations:^{
? ? ? ? ? self .countLb_bottomH.constant= keyBoardHeight+10*sizeScale;
? ? ? }];
? ? }
}
- ( void )keyboardWillHide:(NSNotification*)notificationswift版
{
//獲取鍵盤的高度
NSDictionary*userInfo = [notificationuserInfo];
NSValue *value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRectkeyboardRect = [valueCGRectValue];
int height = keyboardRect.size.height;
self .countLb_bottomH.constant = 12*sizeScale;
}
NotificationCenter.default.addObserver(self,selector:#selector(keyBoardShow(noty:)),name:Notification.Name.UIKeyboardWillShow,object:nil)
NotificationCenter.default.addObserver(self,selector:#selector(keyBoardHidden(noty:)),name:Notification.Name.UIKeyboardWillHide,object:nil)
@objcfunckeyBoardShow(noty:Notification){guardletuserInfo=noty.userInfoelse{return}letvalue=userInfo["UIKeyboardFrameBeginUserInfoKey"]as!NSValueletkeyboardRect=value.cgRectValueletkeyboradHeight=keyboardRect.size.height}
@objcfunckeyBoardShow(noty:Notification){guardletuserInfo=noty.userInfoelse{return}letvalue=userInfo["UIKeyboardFrameEndUserInfoKey"]as!NSValueletkeyboardRect=value.cgRectValueletkeyboradHeight=keyboardRect.size.height}
參考: