I do something similar to the 2nd method you mentioned - On browser resize, set canvas size to PlatformInfo.WindowInnerWidth and height. I then do "wait 0 seconds" twice, and then I copy & paste the same "set canvas size" event below this (seems to help make this work more reliably). Then I use anchor behaviour on objects, or position/size things with events.
I don't know if there's a bad reason to do this, but it helps give me the exact control that I need to support portrait, landscape, and even ultra-wide screen monitors.