我有一个带有自定义UITextView的UIViewController(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];
}
然而,当显示键盘并按下回车键时,CodeTextView会调整大小到原来的高度!当我注释掉[_linesTableView reloadData]时,一切正常。因此,当我重新加载LinesTableView时,不知何故,LinesTableView和CodeTextView会恢复原来的高度。
我不知道如何解决这个问题。我认为这并不难,但我无法想出办法。有人可以帮帮我吗?
提前致谢! :)
答案 0 :(得分:0)
快速而肮脏的方式是将两个东西放在包装它们的UIView中,这样你就可以调整UIView的大小并使其剪辑它的内容,从而调整实际表的大小。这样,当重新加载数据时,即使视图再次向上扩展,它也将被剪切。在我的脑海中,如果您使用UIScrollView并将2个非滚动组件放入其中,它甚至会更好看。这样,键盘占用的位置不会破坏那么多的体验。