FirstView の List のところを、 List { ForEach(env.items) { item in ItemView(id: item.id) } } とすると、いったんpopされるけどすぐにpushされてtrue、falseの状態も保たれてます。 List と ForEach の違いはなに? List を消すと(つまり ForEach だけにすると)、TableView表示はされなくなるんですが、AとかBとかの部分を押すと画面遷移はします。ただ、そうすると強制popは起こらなくなります。List と NavigationLink の組み合わせでこの現象は起こってるぽいですね。List は UITableView と同じで lazily に動作して見えてない部分は作らない機構があって、見えてないとプログラムから遷移させられないという問題が書かれているんですが、今回のもそのlazilyなための仕組みが関係あるかもしれませんね。