30

に がUITextView含まれていUITableViewCellます。ビューが最初に表示されたときのレイアウトは正しいですが、クリックするUITextViewと自動的に少し上にスクロールし、最初の行の文字の上半分が見えなくなります。

この画像は がUITextViewアクティブでない場合です:
UITextView 非アクティブ http://gerodt.homeip.net/uitextview-notactive.png

そして、これはUITextViewアクティブにするためにクリックしたときのものです:
UITextView active http://gerodt.homeip.net/uitextview-active.png

私は UITextView をまったく上にスクロールしません。単純に固定したままにする必要があります。どうすればこれを達成できますか?ですでにいくつかの設定を試しましInterface Builderたが、今のところうまくいきません。

任意の提案をいただければ幸いです。

下呂

4

6 に答える 6

61

UITextView は UIScrollView のサブクラスであるため、構成可能な contentInset プロパティがあります。残念ながら、UITextView インスタンスで contentInset を変更しようとすると、下端のインセットが常に 32 にリセットされます。以前に短い UITextView フレームでこれに遭遇したことがあり、これが問題であることがわかりました。これが問題の原因であると思われますが、デバッガーで textview の contentInset を確認する必要があります。

回避策/解決策は簡単です。UITextView をサブクラス化し、contentInset メソッドをオーバーライドして、常に UIEdgeInsetZero を返すようにします。これを試して:

//
// BCTextView
//
// UITextView seems to automatically be resetting the contentInset
// bottom margin to 32.0f, causing strange scroll behavior in our small
// textView.  Maybe there is a setting for this, but it seems like odd behavior.
// override contentInset to always be zero.
//
@interface BCZeroEdgeTextView : UITextView
@end

@implementation BCZeroEdgeTextView

- (UIEdgeInsets) contentInset { return UIEdgeInsetsZero; }

@end 
于 2009-12-08T02:22:10.927 に答える
16

これは、これが意図されているAppleのエンジニアによると、UITextViewの動作であり、UITextViewは、少なくとも数行の高さのテキストを対象としています。これを回避する方法はありません。代わりにUITextFieldを使用するか、UITextViewの高さを少なくとも3行に増やしてください。

于 2009-07-24T18:45:18.543 に答える
6

次のこともできます。

textView.contentInset=UIEdgeInsetsZero;

あなたのデリゲートファイルで。

于 2011-09-05T00:56:08.893 に答える
1

UITextView望ましくないスクロールで同様の問題が発生していました。最後に contentSize をリセットすることで、最終的に修正することができましたkeyboardDidShow:

- (void)keyboardDidShow:(NSNotification *)notification {
  textView.contentSize = CGSizeZero;
}

次のように、キーボード通知を登録する必要もあります。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

私の場合、フレームを textView の高さにリセットしていたので、スクロールは必要ありませんでしcontentSizetextViewDidChange( 内で textview を拡大していますUIScrollView)。

于 2011-08-26T13:38:20.460 に答える
0

Scale to Fill の代わりに、テキストビューに Redraw を入れてみてください。デリゲートをキャプチャしてコンテンツのオフセットを維持する必要があるかもしれませんが、少なくともポイント (0,0) へのジャンプを防ぐ必要があります。また、サブビューの自動サイズ変更をオフにする必要があります。私も毎回テキストビューの一番上にジャンプしていましたが、これでその問題は解決しました。

ここに画像の説明を入力

于 2014-05-13T02:55:42.340 に答える