2009-09-18 18 views
54

私は以前にUIScrollViewを使用していましたが、今は問題なく使用しています。私は今、古いアプリに追加していますが、期待どおりに機能しています(コンテンツを見たり、指でスクロールしたり、すべての境界やサイズを設定してコンテンツに空きスペースなどはありません。 。)、私はちょうどscrollToRectVisibleを働かせることができません。私もこれをテストするための簡単なアプリを作って、私ができるUIScrollViewは正常に動作しますが、scrollRectToVisible:何もしません。

[scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES]; 

[scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES]; 

または0200に移動:それは単に0,0の位置に移動するように、私も電話を簡素化しています私が期待している通りにscrollRectToVisibleをそこで働かせてください。しかし、私の古いアプリでは、何かをするように見えることはできません。

setContentOffset:でscrollViewをスクロールすることはできますが、それは私が望むものではありません。

このscrollViewとその内容は、IBで宣言され、IBOutletで使用されます。私はscrollViewを処理するために、私のアプリで使用しています唯一のコードが

[scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)]; 

は(私は、水平垂直方向のスクロールだけでは興味がありません)です。

誰もこのような問題に遭遇しましたか?

私は両方のアプリでscrollView属性を比較していますが、それらは同じです。

補遺:

マイscrollViewsフレームがある:0.000000 0.000000 480.000000 179.000000

マイscrollViews contentSizeがある

:0.000000 324.000000

私がスクロールしたいRECTがすでに表示されているといないようですが、まだ働きスクロールが必要です。それが起こっているかどうかは分かりません。これはまさに最悪の事です。解決するために、このような簡単なことのように思える...

補遺#2:

これは私がscrollRectToVisibleなくてはなら作っています方法です:

CGPoint point = myRect.origin; 
if (![clefScrollView pointInside:point withEvent:nil]) { 
    point.x = 0; 
    if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height) 
     point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height; 
    [clefScrollView setContentOffset:point animated: YES]; 
} 

予想通り、このscrollViewに関する他のすべてが動作しますが、 scrollRectToVisible。なぜ?!?任意の野生の推測?

答えて

99

1か月後に、私はそれを最後に理解しました。上記の代替案はうまくいきましたが、それは私を悩ませていました。私はそれを最終的に把握しなければなりませんでした。それはやや愚かな間違いだったことがわかる。

は、ここで私はscrollViewを設定し、私のviewDidLoad、古いコードです:

[clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)]; 

scrollViewの高さや幅の値は0にすることはできません!私はScrollViewのサイズが有効なサイズから始まると仮定していたので、これは私が過ぎ去ったと思います。そして、私は1つの次元がゼロであったという事実を見逃していました!

これは動作します:

[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; 

が、これはそこに誰かに役立ちます願っています。私は間違いなくこれをデバッグしようとして時間をかけすぎました。

+0

ありがとう!私もこれで少し気が狂いました(私は高さを設定していましたが、幅は設定していません) –

+3

これは間違いではありません - c.f.下のオリオンの答え(私はゼロではない幅/高さを持っていた、それは問題を引き起こす '0'ではない...) – Adam

+0

私はこれを同様の方法で行いましたが、まだscrollRectToVisibleは機能していません。そのシミュレータでは動作しますが、デバイスでは動作しません。助けてください。 –

43

ええ、私はscrollRectToVisible:animated:で成功しませんでしたが、setContentOffset:animated:はいつも私のために働きます。好奇心のために、どうしてあなたはsetContentOffset:animated:を使いたくないのですか?それは適切な解決策であるようです。

+3

残念ながら、setContentOffsetは既に表示されているかどうかに関係なく、ポイントまでスクロールします。私はポイントが表示されているかどうかを判断する余分な作業を行うことができますが、私はそれが自分のサンプルやネット上の他のサンプルで動作するのを見ると、なぜscrollRectToVisibleが動作しないのか不思議です。私は何か間違っている必要がありますが、スクロールビューのコードの3行または4行だけで、私は何が見えないのですか? – mahboudz

0

"clefScrollView"のフレームを設定していない場合、上記の推奨解決方法でエラーが発生することがあります。

上記のソリューションを使用しても同じ問題が発生する場合は、コンテンツビューを設定する前にscollView(この場合はclefScrollView)フレームを初期化してください。



    clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)]; 

    [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)]; 



1

私はこのようにそれを持っていたし、それは私がちょうどcontentSizeの高さを変えたので、私はそれが私にどんな問題を与えるとは思わなかったけど、それはやった

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue); 

を動作しませんでした...

この

scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue); 

にそれを変更しなければならなかったscrollView.contentSize.widthがnecessariではありませんが判明設定した値から有効な値に設定してください。

5

scrollviewのdelaysContentTouchesプロパティがNOに設定されていることを確認してください。

scrollRectToVisibleまたはsetContentOffsetをscrollViewのサブビュー内のタッチから呼び出すと、scrollViewはタッチを遅らせることで物事を保持している可能性があります。

したがって、scrollViewで次の項目を設定してください。

scrollView.delaysContentTouches = NO; 

アニメーションの有無にかかわらずscrollViewを移動することができます。

0

ゲームに少し遅れましたが、私は同じ問題を抱えていました。私のスクロールビューのコンテンツサイズは正しく設定されていましたが、高さの値に対してもそうすぎます。フレームとコンテンツのサイズを検証するための広範なチェックが行われたにもかかわらず、まだ動作していませんでした。私は "境界"のフレームの高さを調整しなければならなかった、そしてすべてがうまくいった。

0

私はこの問題と同じ症状がありました。scrollRectToVisibleは意図したとおりに動作しませんでした。私の問題は、ストーリーボード上のスクロールビューにはあいまいな制約があります。それが修正されたら、呼び出しは正常に機能しました。 scrollRectToVisible呼び出しが意図したとおりに動作していないときにチェックするのは何か他のものです。

関連する問題