How Do You Add a Child UUserWidget to a UScrollBox at Runtime?

Does anyone know why these widgets wont display when I add them to the scroll box? the UE_LOGs show It making it through all the logic, not sure what I am doing wrong.

// Add Child UInventoryItemWidget to Scroll box based on the number of items in the lootable actor.

void ULootableInventoryWidget::SetupScrollBox()
{
	if (ItemScrollBox)
	{
		if (ACharacterBase* Player = Cast<ACharacterBase>(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)))
		{
			ALootable* ActorBeingLooted = Player->GetActorBeingLooted();
			if (ActorBeingLooted)
			{
				for (int i = 0; i < ActorBeingLooted->AllItemData.Num(); i++)
				{
					UE_LOG(LogTemp, Warning, TEXT("Loop: %i"), i);

					UInventoryItemWidget* Item = CreateWidget<UInventoryItemWidget>(this->GetOwningPlayer() ,InventoryItemWidgetClass);
					Item->InitItem(ActorBeingLooted, i);
					ItemScrollBox->AddChild(Item);
				}
			}
		}

	}
}

// Pass in the index of the created widget from ULootableInventoryWidget::SetupScrollBox() to Set properties.

void UInventoryItemWidget::InitItem(ALootable* Lootable, int Index)
{
	Initialize();
	SetupThumbnail(Lootable, Index);
	SetupDisplayName(Lootable, Index);
	SetupDescription(Lootable, Index);
	UE_LOG(LogTemp, Warning, TEXT("Item init"));
}

Hmm creating native widgets seems awfully uncommon. Are you sure you want to be creating native UInventoryItemWidget objects, and not a derived blueprint widget with actual UI built in the designer?

Maybe I’m wrong but if I get this right you’re just spawning abstract widgets with no real UI components, hence why nothing is displayed. In that case you’d want to spawn the blueprint widget class where you designed the UI.
For example :

UClass* WidgetClass = LoadClass<UInventoryItemWidget>(nullptr, "/Game/UI/WBP_InventoryItem.WBP_InventoryItem_C");
UInventoryItemWidget* Item = CreateWidget<UInventoryItemWidget>(this->GetOwningPlayer(), WidgetClass);

Down the line however it is better practice to avoid hardcoding reference paths, and use a blueprint editable variable instead :

UPROPERTY(EditAnywhere)
TSubclassOf<UInventoryItemWidget> InventoryItemWidgetClass;
UInventoryItemWidget* Item = CreateWidget<UInventoryItemWidget>(this->GetOwningPlayer(), InventoryItemWidgetClass);

And make the InventoryItemWidgetClass property point to the appropriate widget in the blueprint default properties.