2017-04-08 9 views
3

tl; dr コンテンツウィンドウの上部にあるUIViewsのサイズを大きくして、下にコンテンツを押し下げたくありません。コンテンツサイズを大きくするとコンテンツのオフセットを防ぐ方法

私は多くのUIStackViewsのリストが表示されUIScrollViewを持っている、とUIStackViewsの利点の一つは、あなたがそのサブビューのいずれかにisHidden = falseを設定すると、それは新しいビューを補うために自動的にリサイズすることです。

は今、各リスト項目は、これらのUIStackViewsの1つを有し、そしてユーザーが一斉に、それぞれ1でサブビューにisHidden = falseをセットし、ボタンを押すことができます。つまり、各リストアイテムは、非表示ビューの高さに等しい量だけ増加します(スタックビューごとに同じ高さ)。

スクロールビューのcontentOffsetがゼロの場合は問題ありません。すべての高さが増加するとコンテンツの残りの部分がすべて下方に押し出され、すべてのビューが表示されなくてもスクロールビューの一番上に表示されます。

問題は、ユーザーがスクロールビューの先頭にない場合です。この場合、ユーザーがすべてのビューを非表示にするボタンを押すと、高さが増加するとすべてのビューが下方向に押し出され、上方向にスクロールして表示されます。ユーザーがリスト内をスクロールすると、その上に表示されるビューが増え、ユーザーがボタンを押したときのコンテンツのシフトが大きくなります。

私が探している動作は、ビューの上部にスクロールされているときにユーザーがボタンを押したときと同じですが、スクロール位置は同じです。言い換えれば、ユーザーがどこにスクロールされているかにかかわらず、ボタンを押すと、スクロールビューのコンテンツウィンドウの一番下のものだけがプッシュダウンされます。

どのようにすればよいでしょうか?

答えて

2

さて、あなたの質問を正しく理解していますか?

これは、ユーザーがボタン「すべてを展開する」押すと、それはこのようになりますスクロールビュー

A 
B 
C 
D 
E 

の状態です:

A 
-1 
-2 
-3 
B 
-1 
+-a 
+-b 
-2 
C 
-1 
-2 
-3 
D 
-1 
-2 
E 
-1 
-2 
-3 
-4 

問題は、ユーザーがある場合ということです現在

(リスト内の4番目と5番目の項目です)
+---+ 
|D | 
|E | 
+---+ 

を見て彼らが展開されたリストで見終わる:

+---+ 
|B | 
|-1 | 
+---+ 

しかし、彼らは、彼らが前に見ていたアイテムDを見てする必要があります。

現在表示されているTableViewCellを保存することができ、ビューがアニメーション化するときに、現在のセルにスクロールする(相対的に表示する必要がある)ので、おそらくUITableViewを使用することをおすすめします。UIScrollViewとあなたのケースでは

、私は、ビューはそれがサイズの移行だアニメーション化した後、彼らがどこにあるかを考え出すそして、(現在の contentOffset/ Sizeを使用し、サブビューのフレーム)現在の可視のサブビューをキャプチャしている推薦すると新しい位置にスクロールします。

これは前述のように、親オブジェクトがOSによって追跡およびキャッシュされ、行/セルの挿入/削除を管理する特定の規則があるUITableViewまたはUICollectionViewに適したタスクです。

hth

+0

です。しかし、これはすべてforループで起こるので、各反復で新しいビューは表示されません。これは、各繰り返しで、私は何とかこれがすべて同じレイアウトパスで起こることを保証できない限り、新しい位置にスクロールする必要があることを意味します。同じレイアウトパスですべてが発生しない場合は、毎回新しい位置にスクロールしながらスクロールビューが表示されないようにするにはどうすればよいでしょうか。ユーザーの視点からスクロールが発生するという証拠はありません。 – shoe

関連する問題