效果图:
分析:
正常情况下底部发送的发送框固定好位置后, 键盘弹出会把它挡住!那么就需要我们在键盘弹出的时候改变我们发送框工具栏的位置;
思路:
首先: 整体上来看 textView 和 "声音" "表情" "加号" 三个 Button 添加到一个 View上,然后对 View 进行约束, 这里需要其左边距离(父视图View)0,右边距0, 下面0 然后固定一个高度
其次: 监听键盘的行为当键盘弹出来的时候, 我们把发送框所在的 View 底部的约束进行适当的修改,让其显示在键盘的上方, 键盘消失后回到原来位置
代码实现:
1: 把发送框所在 View 的距离下部的约束拉进响应控制器作为属性
// 工具条底部约束
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *toolBottomConstraint;
2: 使用系统通话实现监听键盘的行为
#pragma mark 通知监听键盘弹出情况 使用的是系统的通知
#当键盘弹出的时候 执行kbWillShow:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbWillShow:) name:UIKeyboardWillShowNotification object:nil];
#当键盘消失的时候 执行kbHideShow:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbHideShow:) name:UIKeyboardWillHideNotification object:nil];```
3: 实现响应通知的方法
\#pragma mark 键盘弹出 触发事件
```code
# 键盘弹出 调整约束的高度
- (void)kbWillShow:(NSNotification *)noti
{
// 获取键盘的高度 首先获取当前键盘的 Rect
CGRect kbFram = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat kbHeight = kbFram.size.height;
// 把约束改掉
self.toolBottomConstraint.constant = kbHeight ;
[UIView animateWithDuration:1 delay:0 options: UIViewAnimationOptionCurveEaseInOut animations:^{
// 布控子视图
[self.view layoutIfNeeded];
} completion:nil];
}
# 键盘收起 一切回到梦开始的地方
- (void)kbHideShow:(NSNotification *)noti
{
// 把约束改成开始的 0
self.toolBottomConstraint.constant = 0 ;
[UIView animateWithDuration:0.1 delay:0 options: UIViewAnimationOptionCurveEaseInOut animations:^{
// 布控子视图
[self.view layoutIfNeeded];
} completion:nil];
}```
有时间在写高度适应的问题, 最近写点小项目! 加油!