Is there any event function I can subscribe to that happens after canvas performs its layout?
I am using Canvas.ForceUpdateCanvases()
But this doesn’t seem like the best solution to me. I am hoping that there is a function like Start() that runs only once but after all other layout is complete.
No, there is none: Unity - Manual: Order of execution for event functions
You can, however, trigger a “wait for one frame and then do a thing”, for example with a coroutine:
private void Start()
private IEnumerator DoStuffNextFrame()
yield return null; // wait one frame