Oh wow that worked perfectly thanks!
I do have to wait for 2 frames to be able to set the sizeDelta and it work. Is there a more reliable callback or anything I can listen for here instead?
SpineAtlasAsset runtimeAtlasAsset = SpineAtlasAsset.CreateRuntimeInstance(spriteAtlasData, new [] { spriteAtlas }, spineMaterial, true);
SkeletonDataAsset runtimeSkeletonDataAsset = SkeletonDataAsset.CreateRuntimeInstance(spineJson, runtimeAtlasAsset, false);
skeletonGraphic.skeletonDataAsset = runtimeSkeletonDataAsset;
skeletonGraphic.Initialize(false);
skeletonGraphic.Skeleton.SetSkin(streamableSpineData.SkinName);
skeletonGraphic.Skeleton.SetSlotsToSetupPose();
skeletonGraphic.AnimationState.SetAnimation(0, streamableSpineData.AnimationName, true);
skeletonGraphic.MatchRectTransformWithBounds();
skeletonGraphic.layoutScaleMode = SkeletonGraphic.LayoutMode.FitInParent;
yield return new WaitForEndOfFrame();
yield return new WaitForEndOfFrame();
// set the RectTransform to same size as parent. left, right, top, bottom = 0, 0, 0, 0 in Inspector.
skeletonGraphic.rectTransform.anchoredPosition = Vector2.zero;
skeletonGraphic.rectTransform.sizeDelta = Vector2.zero;