- Home /
Incorrect RectTransform width value when trying to read child RectTransform width.
public RectTransform cellContainer;
private int m_numCells;
private float m_leftScrollLimit;
private float m_rightScrollLimit;
private List<RectTransform> m_cellRects;
private HorizontalLayoutGroup m_horizontalLayoutGroup;
void Awake()
{
m_cellRects = new List<RectTransform>();
m_numCells = cellContainer.childCount;
for(int i = 0; i < m_numCells; i++) {
RectTransform rect = (RectTransform)cellContainer.GetChild(i);
float w = rect.rect.width;
m_cellRects.Add((RectTransform)cellContainer.GetChild(i));
}
m_horizontalLayoutGroup = cellContainer.gameObject.GetComponent<HorizontalLayoutGroup>();
Assert.AssertNotNull(m_horizontalLayoutGroup);
}
void Start() {
float cellWidth = m_cellRects[0].rect.width;
float canvasWidth = UIController.Instance.CanvasWidth;
// Set the total width of the horizontal cell container
float containerWidth = m_numCells * cellWidth + Mathf.Max(0, m_numCells - 1) * m_horizontalLayoutGroup.spacing + (UIController.Instance.CanvasWidth - cellWidth);
cellContainer.sizeDelta = new Vector2(containerWidth, UIController.Instance.CanvasHeight);
float leftAnchoredPosition = (containerWidth - UIController.Instance.CanvasWidth) * 0.5f;
m_leftScrollLimit = leftAnchoredPosition + cellWidth * 0.5f;
m_rightScrollLimit = -m_leftScrollLimit;
ScrollToCurrent();
}
I have the above script attached to a Scroll View. The cellContainer is the "Content" of the scroll view, which has a Horizontal Layout Group component. The content has child panels that can be scrolled horizontally. Each child panel has a Layout Element component and min width is set to 150. When I instantiate this UI gameobject for the first time the cellWidth in the Start function reads 150 correctly. But when I instantiate this UI screen later when needed, the cellWidth value is 0 and not 150 which makes the rest of the calculation wrong. I can't figure out why the first time the right value is reflected but not later. Do let me know if you have any idea about this. Thank you!
Your answer
![](https://koobas.hobune.stream/wayback/20220612145354im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Getting the width of UI text inside a layout allways 0. 1 Answer
Resizing UI Image but with minimum width 2 Answers
RectTransform outline and position aren't synced 0 Answers
Moving RectTransform over another RectTransform under GridLayout 0 Answers
How do I layout dynamically instantiated UGUI components? 1 Answer