OK, I tried breaking the problem down and got some info that may help.
I CAN get the buttons to render if I call NGUITools.AddChild from Awake, Start or in an Update.
I CANNOT get the buttons to render if I call NGUITools.AddChild from a custom public function that is called either through a button press seen in another script or using Unity's Invoke or InvokeRepeating function.
For example, the following code will not render my button until I scroll the panel:
Start()
{
InvokeRepeating("Test", 1, 10); // same with Invoke as well
}
Test()
{
myButton = NGUITools.AddChild(myUIGrid, buttonPrefab);
}
Does this help?