键盘处理就像iOS 7中的Messages app一样

我正在实现一个类似于Messages应用程序中的视图的视图,因此有一个视图,UITextView附加到屏幕的底部,还有UITableView显示主要内容.当它被轻敲时,它会随着键盘向上滑动,当键盘被解除时,它会滑回到屏幕的底部.

我有这个部分并且它完美地工作 – 我只是订阅了键盘通知 – 将隐藏和显示.

问题是我已经在UITableView上将键盘关闭模式设置为交互式,并且我无法在平移时捕获键盘的更改.

第二个问题是,使用uitextview的这个栏覆盖了uitableview的某些部分.如何解决这个问题?我仍然希望uitableview像在消息应用程序中一样“在”这个栏下面.

我在所有地方都使用AutoLayout.

任何帮助将不胜感激!

============

EDIT1:
这是一些代码:

查看层次结构如下:

视图
   – UITableView(这个将包含“消息”)
   – UIView(这个会滑动)

UITableView对父视图的顶部,左侧,右侧和底部有约束,因此它填满整个屏幕.
UIView对父视图的左,右和底有约束,所以它粘在底部 – 我通过调整约束的常量来移动它.

在ViewWillAppear方法中:

NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.DidShowNotification, OnKeyboardDidShowNotification);
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillChangeFrameNotification, OnKeyboardDidShowNotification);
NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillHideNotification, OnKeyboardWillHideNotification);

以下是方法:

void OnKeyboardDidShowNotification (NSNotification notification)
{
    AdjustViewToKeyboard (Ui.KeyboardHeightFromNotification (notification), notification);
}

void OnKeyboardWillHideNotification (NSNotification notification)
{   
    AdjustViewToKeyboard (0.0f, notification);
}

void AdjustViewToKeyboard (float offset, NSNotification notification = null)
{
    commentEditViewBottomConstraint.Constant = -offset;

    if (notification != null) {
        UIView.BeginAnimations (null, IntPtr.Zero);
        UIView.SetAnimationDuration (Ui.KeyboardAnimationDurationFromNotification (notification));
        UIView.SetAnimationCurve ((UIViewAnimationCurve)Ui.KeyboardAnimationCurveFromNotification (notification));
        UIView.SetAnimationBeginsFromCurrentState (true);
    }

    View.LayoutIfNeeded ();
    commentEditView.LayoutIfNeeded ();

    var insets = commentsListView.ContentInset;
    insets.Bottom = offset;
    commentsListView.ContentInset = insets;

    if (notification != null) {
        UIView.CommitAnimations ();
    }
}
最佳答案
我为此目的制作了一个开源库.它适用于iOS 7和8,并且也可以作为cocoapod使用.

https://github.com/oseparovic/MessageComposerView

以下是它的样子:

  

您可以使用如下所示的非常基本的初始化函数来创建屏幕宽度和默认高度,例如:

self.messageComposerView = [[MessageComposerView alloc] init];
self.messageComposerView.delegate = self;
[self.view addSubview:self.messageComposerView];

还有其他一些初始化程序可用于自定义框架,键盘偏移和textview最大高度,以及一些代表可以挂钩框架更改和按钮单击.请参阅自述文件了解更多

转载注明原文:键盘处理就像iOS 7中的Messages app一样 - 代码日志