0

カスタムUITextView(CodeTextView)を含むUIViewControllerがあり、このテキストビューの左側にカスタム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 に答える