unit – The transform position of the instantiated UI element does not update

I create a user interface using a prefab and move it using a coroutine, the prefab has transformer.position of (0,0,0):

private list liveBoxes = new list();

cancel PopDialogBox (Vector3 pos)
{
GameObject box = Instance (dialogBoxPrefab, pos, Quaternion.identity, canvas.transform);
liveBoxes.Add (box);
for (int i = 0; i < liveBoxes.Count; ++i)
    StartCoroutine(SmoothMoveDialogBox(liveBoxes[i]));
}

// Move Box
IEnumerator SmoothMoveDialogBox(GameObject box)
{
  // pos is still prefab's position
  // so it doesn't move
  Vector3 pos = box.transform.position;
  Vector3 end = pos;
  end.y += boxMoveDistance;

  while (Vector3.Distance(pos, end) > Mathf.Epsilon)
{
Vector3 target = Vector3.MoveTowards (pos, end, boxMoveSpeed);
box.transform.position = target;
pos = box.transform.position;
return return null;
}
}

The problem is in the listing the box always refers to the original prefab when I inspect the transformation position. Why am I getting this? How can I fix it?