UGameplayStatics::OpenLevel - UUserWidget Problem

So I have custom UUserWidgets that I instantiate from BP code. My C++ has singletons for those UUserWidgets that it assigns through BeginPlay and unassigns through BeginDestroy.

Now the problem is that when I call UGameplayStatistics::OpenLevel - the widgets are destroyed but BeginDestroy is never called. So even if I were to create the widgets for each level ( seems like a bad solution ) - the C++ code would throw an error for widgets that it already constructed.

So I have a few questions:

  1. Is it possible to make UUserWidgets persistent between levels?
  2. Is it possible to make BeginDestroy trigger, and if not is there another function I can use to detect the widget being deleted?

Answering my own questions.

Sion Sheevok, a member of the Fortnite UI Dev team was kind enough to help me find the solution to this on Discord.

The function to detect the widget being taken off the viewport is NativeDestruct. That’s what I was looking for!