之前做的項(xiàng)目中有過(guò)注冊(cè)和修改個(gè)人信息的頁(yè)面,因?yàn)檩斎氲目虮容^多,如果要適配較小的屏幕時(shí)(比如說(shuō),3.5寸屏),不用滾動(dòng)視圖的話沒(méi)有辦法可以將所有輸入框都顯示在屏幕上。所以把輸入框都放到了ScrollView上面(我用xib來(lái)拖入控件,而關(guān)于ScrollView的適配問(wèn)題是比較麻煩的,自行百度),這里也會(huì)有鍵盤(pán)的遮擋問(wèn)題。
關(guān)于ScrollView的鍵盤(pán)遮擋問(wèn)題,一開(kāi)始話了很多時(shí)間去改變它的Frame的高度,但是結(jié)果不如人意。后來(lái)在網(wǎng)上看了很多資料,發(fā)現(xiàn)一個(gè)簡(jiǎn)單有效的方法,特此記錄下來(lái),供以后查閱。
首先需要注冊(cè)好鍵盤(pán)通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
接下來(lái)是兩個(gè)注冊(cè)方法的實(shí)現(xiàn):
//顯示鍵盤(pán)
- (void)keyboardWillShow:(NSNotification *)notification {
//獲取鍵盤(pán)高度
CGFloat height = [self fetchKeyboardHeightWithNotification:notification];
//設(shè)置contentInset的值(一開(kāi)始的默認(rèn)值為(0,0,0,0))
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, height, 0);
[self.bgScrollView setContentInset:e];
//這個(gè)可以設(shè)置ScrollView上鍵盤(pán)的隱藏方式
//_bgScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
}
//隱藏鍵盤(pán)
- (void)keyboardWillHide:(NSNotification *)notification {
//將contentInset的值設(shè)回原來(lái)的默認(rèn)值
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);
[self.bgScrollView setContentInset:e];
NSLog(@"scrollView.height = %f", self.bgScrollView.contentSize.height);
}