有输入框的界面如何自动随键盘调整

刚开始的时候,非常害怕有输入框的界面,因为键盘出现后,用掉了大部分的屏幕,很多输入框都被覆盖了。随着经验的增加,突然有一天想明白了,其实很简单。

下面是其方法:

1,把所有空间放到一个UIScrollView之中,而不是缺省的UIView

一般情况下,把UIScrollView设成100%覆盖UIView。

其它空间,如UILabel, UITextField, UIButton等可以使用大小自动调整等。


下面是本人APP - 多彩旅行的登陆界面:


2, 处理键盘显示、隐藏时调整ScrollView的ContentSize

第一步:view出现后开始侦听键盘显示、隐藏时间。

- (void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];


。。。

NSNotificationCenter *nCenter = [NSNotificationCenter defaultCenter];

[nCenter addObserver:self

    selector:@selector(keyboardDidShown:)

name:UIKeyboardDidShowNotification object:nil];

[nCenter addObserver:self

    selector:@selector(keyboardWillHide:)

name:UIKeyboardWillHideNotification object:nil];

}

第二步:view消失时注销键盘侦听。

- (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];


。。。


NSNotificationCenter *nCenter = [NSNotificationCenter defaultCenter];

[nCenter removeObserver:self name:UIKeyboardDidShowNotification object:nil];

[nCenter removeObserver:self name:UIKeyboardWillHideNotification object:nil];

}


第三步:键盘显示事件处理。

- (void)keyboardDidShown:(NSNotification *)notification

{

NSDictionary* info = [notification userInfo];

CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;


// 找到合理的键盘高度

if (kbSize.width < kbSize.height) {

CGFloat t = kbSize.height;

kbSize.height = kbSize.width;

kbSize.width = t;

}

// UIView的大小

CGSize vwSize = self.view.bounds.size;

// 最低高度=最下面控件(这里是txtRegister)的起始位置(origin.y)+高度(size.height)

CGFloat minBottom = txtRegister.frame.origin.y + txtRegister.frame.size.height * 2;

// 最低高度加上键盘的高度

minBottom += kbSize.height;

// 如果键盘没有覆盖最下面的控件,则最低高度等于窗口大小

if (vwSize.height > minBottom)

minBottom = vwSize.height;

// 调整ScrollView的ContentSize等于最低高度(宽度不变)

// 这样所有控件都可以移动到键盘之外

self.viewScroll.contentSize = CGSizeMake(vwSize.width, minBottom);

}



第四步:键盘消失事件处理。

- (void)keyboardWillHide:(NSNotification *)notification

{

CGSize vwSize = self.view.bounds.size;

CGFloat minBottom = txtRegister.frame.origin.y + txtRegister.frame.size.height * 2;

if (vwSize.height > minBottom)

minBottom = vwSize.height;

self.viewScroll.contentSize = CGSizeMake(vwSize.width, minBottom);

}


希望对大家有所帮助。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值