NGUI: как сбросить/обновить UIgrid и UIScrollBar при добавлении нового элемента в режиме реального времени

У меня есть панель UIScroll и представление UIScroll, содержащее UIGrid, например:

  • scrollWindow
    • scrollBar (UIScroll Bar)
    • scrollView (представление UIScroll)
    • Сетка (UIGrid)

Я использую их для отображения списка элементов и прокрутки вверх и вниз, чтобы увидеть их все, и это работает, когда некоторые элементы добавляются в начале, но у меня есть небольшая проблема, когда я добавляю новый элемент на последнее место в реальном время.

Когда я запускаю сцену, я помещаю некоторые элементы в сетку, и у меня есть что-то вроде этого в представлении иерархии:

  • scrollWindow
    • scrollBar (UIScroll Bar)
    • scrollView (представление UIScroll)
    • Grid (UIGrid)
      • item01
      • пункт02
      • пункт03

Все три пункта отображаются без проблем и отсортированы по алфавиту. У меня также есть функция, которая добавляет новый элемент с именем item04 в сетку, когда я нажимаю какую-либо кнопку:

public void addItem(){

  // create a new instance of a prefab
  GameObject prefab = Instantiate(Resources.Load("MyItems/TestItem")) as GameObject;
  // get the grid
  GameObject itemsGrid = GameObject.Find("scrollWindow/scrollView/Grid");
  // add the new item in the grid
  itemsGrid .GetComponent<UIGrid>().AddChild(prefab.transform);

  // set the item name
  prefab.name = "item04";

  // set the item position
  prefab.transform.localScale = new Vector3(1f, 1f, 1f);
  prefab.transform.localPosition = new Vector3(0f, 0f, 0f);
  itemsGrid .GetComponent<UIGrid>().repositionNow = true;

  // From here I try to update the grid and the scroll bar in order to make the 
     grid to show the last item that is below all of them

  GameObject.Find("scrollWindow/scrollBar").GetComponent<UIScrollBar>().value = 1;
  GameObject.Find("scrollWindow/scrollView").GetComponent<UIScrollView>().ResetPosition();

}

Проблема в том, что, хотя элемент item04 добавлен, сетка и полоса прокрутки не перемещаются, а элемент item04 не появляется, пока пользователь не перемещает полосу прокрутки вверх и вниз.

Есть ли способ заставить сетку или полосу прокрутки опускаться и отображать последний добавленный элемент в режиме реального времени без взаимодействия с пользователем?

Благодарю вас!


person Kane    schedule 16.09.2014    source источник


Ответы (1)


Я это сделал!

itemsGrid .GetComponent().Reposition(); -> Это заставляет сетку отображать все элементы и обновлять полосу прокрутки.

Надеюсь, это может быть полезно для других людей :)

person Kane    schedule 16.09.2014