Unity cannot set precisly localPosition


I found strange behaviour when I was trying to set position.

I have this code:

private const float BaseY = -45f; private const float BaseX = 12.5f; 
var tile = new WorldTile(playableWorld.Name) {     WorldName = playableWorld.Name,      ServerState = GameServerState.Offline }; tile.Instance.transform.SetParent(gameObject.transform, false); tile.Instance.transform.localPosition = new Vector3(BaseX, BaseY, 0) 

Where the WorldTile is just wrapper class around creating GameObject, everywhere else is this working – position is perfectly set witihin parent, but when I try here to set the local position, it is not set on [12.5, -45, 0], it is set to [12.5, -295, 0].

I got this structure in Canvas, where CreatedList is element with predefined height of 500, it seems like unity is trying to center the element and then add my position to it..

If I change the height of the parent element to zero, it has the position I set.

Inspector

Why is that happening when parent object has height?

I am creating object from prefab, which I set to the parent element. Here I want the created object to be exactly on Y -45px from top. How to achieve this?