addSubview(_:)とremoveFromSuperView()をしてしまうと、結果としてビューが外された最後の状態でUIが更新されます。download()は同期的な処理ですか?最も望ましいと思われる解決はdownload()メソッドを非同期処理にして完了時点でコールバックを受け取れるようにして、addSubview(_:) を呼んでからdownload()、ここまでは同じで、removeFromSuperView()をダウンロード完了のコールバック内で呼ぶことです。addSubview(_:)の直後に一度イベントループに処理を戻してUIを更新して、download()、removeFromSuperView()を呼びます。view.addSubview(uiView) DispatchQueue.main.async { self.download() uiView.removeFromSuperView() }