But because Canvas.ForceUpdateCanvases() will also change the rect and call OnRectTransformDimensionsChange() if rect changed.
In some cases, Rebuild() may be called many times before it reaches its final size.
Although it works but that is not a good solution if there has many objects need to be handled...