0

我有一个 UIViewController,里面有一个自定义 UITextView(CodeTextView),在这个文本视图的左边我有一个自定义 UITableView(LinesTableView)。LinesTableView 包含与 CodeTextView 对齐的行号。

当我开始编辑 CodeTextView 并出现键盘时,我编辑了两个视图的大小:

- (void)keyboardAppears:(NSNotification *)notification
{
    [_codeTextView setFrame:CGRectMake(30, 0, 290, self.view.frame.size.height - 216.0f)];
    [_linesTableView setFrame:CGRectMake(0, 0, 30, self.view.frame.size.height - 216.0f)];
}

编辑 CodeTextView 并按下按钮时,我会更新 LinesTableView:

- (void)updateLines
{
    NSString *plainText = self.text;
    NSArray *components = [plainText componentsSeparatedByString:@"\n"];
    int lines = components.count;
    if([[components lastObject] isEqualToString:@""]) lines--;
    _linesTableView.lines = lines;
    [_linesTableView reloadData];
}

但是,当显示键盘并按 Enter 键时,CodeTextView 会调整为原始高度!当我注释掉 [_linesTableView reloadData] 时,一切正常。因此,当我重新加载 LinesTableView 时,LinesTableView 和 CodeTextView 以某种方式恢复了它们的原始高度。

我不知道如何解决这个问题。我认为这并不难,但我想不出办法做到这一点。谁能帮我解决这个问题?

提前致谢!:)

4

1 回答 1

0

快速而肮脏的方法是将这两个东西放在包装它们的 UIView 中,这样您就可以调整 UIView 的大小并使其剪辑它的内容,而不是调整实际表格的大小。这样,当重新加载数据时,即使视图再次放大,它也会保持裁剪状态。在我看来,如果您使用 UIScrollView 并将 2 个非滚动组件放入其中,它会更好看。这样,键盘占据的位置就不会那么破坏体验。

于 2013-01-02T19:47:10.443 回答