戻っていたわけじゃなかったのだ。viewが再レンダリングされていて、それで一番上にいってただけだったんだ。 気づくのに時間がかかったので、メモしておくのだ

スクロールが戻ってるのではなく、viewが再生成されているだけであった

つまり、Navigationで戻った際、viewが再生成されているから、一番上にいるだけであって、別にスクロール位置の情報が破棄されているわけではなかったのだ。。。

じゃ、なんでワイのviewは破棄されていたのか?って話で。。

onAppearでデータの取得をしていて、それが戻るで呼ばれていた

こんな感じのコードを使っていて。。

 .onAppear{

  CommentListdata.initialize(contentID: self.ContentID, parentCommentID: 0)
}

CommentListdata.progress == trueの時にprogressviewが表示され、
上記の初期化が終わるとCommentListdata.progress = falseが格納され、
データに問題なければCommentListdata.progress.isValidにtrueが入り、
CommentListdata.progress = false かつ CommentListdata.progress.isValid==trueの時に
取得されたデータのviewが表示される。

でもこれでは、Navigationで戻るたびに、再度データ取得が走っていたのだ。。

isValid == trueなら、戻ってもデータ取得しなけりゃいいわけで。。

なので、当然以下で対処

 .onAppear{
 if CommentListdata.isValid == false{
  CommentListdata.initialize(contentID: self.ContentID, parentCommentID: 0)
 }
}

これで再取得が走らないので、再レンダリングが起きず、スクロールが上に戻ることはなくなったのだ

よかったね

コメント