Michael

写写代码,说说人生

您好,我是Michael,欢迎来到我的个人家园。
代码搬运工,目前就职于XX证券,努力修行中。


H5 / Java / Objc / Swift / Vue / RN

TableView中键盘弹出,TableView自动上移问题

首先在ios4以后,当UITableViewCell里有UITextfield,当输入时键盘遮盖了UITextField,UITableView是会自动上移,当如果要让tableView自动滚动的话,还需要设置一下tableView的contentInset。接下来介绍一下实现步骤:

首先监听键盘出现和消失

// 监听键盘出现和消失 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

收到通知在方法里面实现

#pragma mark 键盘出现
- (void)keyboardWillShow:(NSNotification*)note
{
    CGRectkeyBoardRect=[note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    self.tableView.contentInset= UIEdgeInsetsMake(0,0, keyBoardRect.size.height,0);
}

#pragma mark 键盘消失
- (void)keyboardWillHide:(NSNotification*)note
{
    self.tableView.contentInset = UIEdgeInsetsZero;
}

这样就可以实现自动滚动了,另一种方法是键盘出现的时候把tableView的frame的高度减去键盘的高度,也可以实现,例如:

#pragma mark 键盘出现
- (void)keyboardWillShow:(NSNotification *)note
{
    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
    CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
    CGRect keyBoardRect = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    self.tableView.frame = CGRectMake(0, 64, screenW, screenH - 64 - keyBoardRect.size.height);
}

#pragma mark 键盘消失
- (void)keyboardWillHide:(NSNotification *)note
{
    self.tableView.frame = CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64);
}

推荐第一种方法,demo下载地址:https://github.com/yybchl/yoyo.git

最近的文章

iOS开发中的UDID和UUID详解

今天突然想和大家聊聊UDID和UUID的问题,虽然平时我们对这两个东西很忽视,往往也很难区分这两个东西。今天就来好好谈谈。UDIDUDID:设备唯一标识符,全名为 Unique Device Identifier。从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址。需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来识别某一台设备。UDID是一个40位十六进制序列,我们可以使用iTu...…

iOS开发继续阅读
更早的文章

学习并理解 23 种设计模式

设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。。在《设计模式:可复用面向对象软件的基础》一书中所介绍的 23 种经典设计模式,不过设计模式并不仅仅只有这 23 种,随着软件开发行业的发展,越来越多的新模式不断诞生并得以应用。有经验的开发者在学习设计模式可以和过往的经验互相印证,更容易理解这些设计模式。设计模式一般包含模式名称、问题、目的、解决方案、效果等...…

Java开发继续阅读