iOS 根據(jù)彈出的鍵盤高度改變控件Frame

根據(jù)鍵盤高度改變控件尺寸.gif

鍵盤高度是不一樣的所以不能寫死 需要根據(jù)彈出的鍵盤動(dòng)態(tài)獲取

第一步

在需要的地方注冊(cè)監(jiān)聽

    //監(jiān)聽鍵盤尺寸改變(包含鍵盤彈出)
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillChangeFrame:)
                                                 name:UIKeyboardWillChangeFrameNotification
                                               object:nil];
/*
     有些地方說(shuō)這里監(jiān)聽`UIKeyboardWillShowNotification` 但是這個(gè)監(jiān)聽僅僅只是監(jiān)聽鍵盤彈出這一個(gè)事件
     如果在鍵盤彈出期間鍵盤改變了尺寸是無(wú)法監(jiān)聽到的
     比如 彈出的鍵盤高度是88 你能監(jiān)聽到 然后切換了鍵盤類型 鍵盤變成了40高  鍵盤變成40高這個(gè)事件你是無(wú)法監(jiān)聽到并且做相應(yīng)處理的
     個(gè)人覺(jué)得監(jiān)聽`UIKeyboardWillChangeFrameNotification`會(huì)好一些
    */
    
    //監(jiān)聽收回鍵盤
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardDidHide:)
                                                 name:UIKeyboardDidHideNotification
                                               object:nil];

第二步

實(shí)現(xiàn)監(jiān)聽的方法

- (void)keyboardWillChangeFrame:(NSNotification *)notification {
    
   NSDictionary *info = [notification userInfo];
    //獲取改變尺寸后的鍵盤的frame
    CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    [UIView animateWithDuration:0.2 animations:^{
        
        CGRect frame = _settingTableView.frame;
        //如果是監(jiān)聽鍵盤尺寸改變 一定要用計(jì)算最終高度的方式來(lái)計(jì)算 如果用控件自加自減的方式會(huì)出錯(cuò)
        frame.size.height = SCREEN_HEIGHT - 64 - endKeyboardRect.size.height;
        //這里的計(jì)算思路是 屏幕高度  - (導(dǎo)航欄 + 狀態(tài)欄) - 當(dāng)前鍵盤的高度 = tableView的高度 
        //可以根據(jù)實(shí)際情況做處理
        _settingTableView.frame = frame;
    }];
}


- (void)keyboardDidHide:(NSNotification *)aNotification{
        //鍵盤收起后恢復(fù)控件尺寸
        [UIView animateWithDuration:0.2 animations:^{
            
            CGRect frame = _scrollView.frame;
            //同理這里也應(yīng)該是計(jì)算最終高度的方式來(lái)計(jì)算
            frame.size.height = SCREEN_HEIGHT - 64;
            _scrollView.frame = frame;
        } completion:^(BOOL finished) {
            
        }];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容