我在Objective-C中创建了一个聊天应用程序。我的对话面板有两个项目,文本字段和表格将显示消息。我使用UIView作为文本字段及其按钮,此视图位于屏幕的底部。每当我开始输入时,会出现键盘,您可以猜到,文本字段不可见。
我知道使用滚动视图,但这一次,滚动视图不太合适,因为我不希望桌面视图向上移动。使用TableViewController而不是ViewController是页脚的一个选项,但是在这个选项中,如果没有消息,则页脚顶部。
因此,我使用ViewController并以编程方式移动包含文本字段的视图。我的代码是:
- (void) keyboardWasShown:(NSNotification *)notification {
[UIView animateWithDuration:0.3 animations:^{
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameEnd = [keyboardInfo valueForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [keyboardFrameEnd CGRectValue];
[self.textFieldViewBottomConstraint setConstant:+(keyboardRect.size.height)];
[self.view setNeedsLayout];
}];
}
此代码在没有表格视图时有效。我看到我的观点上升了。但是,由于存在表视图,因此视图和文本字段仍然不可见。他们在桌面视图下。
我该怎么做?如何将视图移动到表视图?
答案 0 :(得分:1)
大多数情况下,包含textField的视图都在tableView下面。
尝试提供约束,tableview top到superview和view top 到tableview
并给出其他约束。拿一个出口来获得tableView的最高限制。当你收到keyboardWasShown将顶部约束改为某些令人满意的-ve值时,当键盘再次被解除时,为tableview top设置前一个约束。我之前正在研究这种情况,这种方法对我有用,可能对你有用。
或者,如果你真的想要移动tableView上方的视图,请尝试使用
self.view.bringSubviewToFront(self.yourView)
它会避免视图低于tableview。
答案 1 :(得分:0)
试试IQKeyboardManagerSwift
。您只需要创建一个Bridge-Header.h文件。桥接它并在AppDelegate.m
中的didFinishLaunchingWithOptions
文件中添加一行。
IQKeyboardManager.sharedManager().enable = true
之后不需要做任何事情,它会在每个字段中的keyBoard上添加Next,Previous,Done按钮。此视图也可以在不做任何事情的情况下进行滚动。