无法将UIView移动到UITableView上

时间:2016-08-02 06:33:39

标签: ios objective-c iphone uitableview uiview

我在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];
    }];
}

此代码在没有表格视图时有效。我看到我的观点上升了。但是,由于存在表视图,因此视图和文本字段仍然不可见。他们在桌面视图下。

我该怎么做?如何将视图移动到表视图?

2 个答案:

答案 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按钮。此视图也可以在不做任何事情的情况下进行滚动。