0

そこで、ビューポート(320、367)よりも高いUIView(320,470)で詳細コンテンツを作成したいと思います。

私はそれをIBのように分離して作成します(写真を参照)。UIScrollViewをスクロール可能にするためにContentSizeを設定するまで、すべてが正常に見えます。

これは私のコードですViewDidLoad

CGRect frame = self.uiContent.frame;
[self.uiScrollView addSubview:self.uiContent];
[self.uiScrollView setContentSize:frame.size];

setContentSizeが呼び出された後、コンテンツはアニメーションで中央にスクロールされます。その自動スクロールを防ぐにはどうすればよいですか?

ここに画像の説明を入力してください

4

1 に答える 1

1

私は犯人を見つけました..それはでしたUITextView。申し訳ありませんが、アドレスラベルの下の複数行ラベルにUITextViewを使用しています。

他の質問で「佐野武人」を引用:https ://stackoverflow.com/a/5673026/453407

コールトレースを追跡して自動スクロールがどのように行われるかを調べたところ、UITextFieldに文字を入力すると、内部の[UIFieldEditorscrollSelectionToVisible]が呼び出されることがわかりました。このメソッドは、UITextFieldの最も近い祖先のUIScrollViewに作用するようです。

UIScrollViewテキストが変更されUITextViewたときに自動スクロールされます。UITextViewだから私はサブクラス化UIScrollviewしてオーバーライドすることで解決策を見つけました

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {

自動スクロールを無効にするには何も返しません...将来使用する予定がある場合は、bool変数を使用して、を使用して有効/無効にします。

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {
    if (!self.disableAutoScroll) {
        [super scrollRectToVisible:rect animated:animated];
    }
}

したがって、コードでUITextViewを変更する前に自動スクロールを無効にし、後で有効にすることができます。

于 2012-10-04T04:47:59.473 に答える