質問

UITextViewに完全に収まるよりも多くのテキストを書き込むと、テキストは上にスクロールし、カーソルはビューの最下行の1〜2行上に配置されることがよくあります。これは、アプリケーションがテキストビューの高さ全体をうまく利用できるようにするため、少しイライラします。

基本的に私が望むのは、UITextViewを設定して、最下部まで書き込み、スクロールだけに使用しないことです。

いくつかの同様の質問を見てきましたここここおよびこちら。しかし、私はまだ適切な解決策を見ていません。

ありがとう

役に立ちましたか?

解決

実装が少し異なります(スクロールを無効にしたい)が、カーソルがUITextViewから飛び出すのを止める必要もありました。これを行うために、UITextViewサブクラスにnull scrollRectToVisibleを実装しました。このように:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
{
// do nothing. This fixes the cursor jumping above the field defect.
}

他のヒント

優れたソリューションは、サブクラスUITextViewに行を追加する

-(void) setContentOffset:(CGPoint)contentOffset {
    [self setContentInset:UIEdgeInsetsZero];
    [super setContentOffset:contentOffset];
}

動作しました!

これを使用

NSRange myRange=NSMakeRange(outPutTextView.text.length, 0);

[outPutTextView scrollRangeToVisible:myRange];

正しいことを理解していれば、使用できます

[textView setScrollEnabled:NO];

スクロールを無効にします。カーソルが下のマージンに達したときに入力しないのはどうですか...多分それは良い解決策ではありませんが、いくつかのしきい値( [textView text] の最大文字数)を追加して

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
[[textView text] length]>の場合、

UITextViewのデリゲートメソッドmaxCharacters

プロパティ 'contentOffset'も使用できるようです...

setframeで最後の行を取得しました:

  1. 行の高さを setframe できます
  2. 編集中に-(BOOL) textView:shouldChangeTextInRange:replacementText: scrollRangeToVisible:を使用すると、引数は selectedRange
  3. 編集を終了したら、元のサイズに setframe
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top