I look forward to trying that fix when it hits non-pro. I did find something that seems to work. Someone else posted a version of this function on another thread here, that I am calling immediately after I generate the screen in the screenshot and it does seem to fix the issue. Strangely if even one frame passes though before I call this, it will not work. Not sure if it gives any clues to something you could bake into NGUI though.
public static void UILabelUpdateDynamicFonts()
{
Debug.Log("UpdateDynamicFonts");
// find all dynamic fonts
var dynamicFonts
= new Dictionary
<UIFont,
System.Text.StringBuilder>();
// find all labels
UILabel[] labels = NGUITools.FindActive<UILabel>();
for (int i = 0, imax = labels.Length; i < imax; ++i)
{
UILabel lbl = labels[i];
UIFont fnt = lbl.font;
if (!string.IsNullOrEmpty(lbl.text))
{
if (fnt.isValid && fnt.isDynamic)
{
if (!dynamicFonts.ContainsKey(fnt))
{
//Debug.Log("Adding dynamicFonts: " + fnt.name);
dynamicFonts
.Add(fnt,
new System.Text.StringBuilder()); }
dynamicFonts[fnt].Append(lbl.text);
lbl.MarkAsChanged();
}
}
}
// request fonts
foreach (var pair in dynamicFonts)
{
UIFont fnt = pair.Key;
string text = pair.Value.ToString();
fnt.dynamicFont.RequestCharactersInTexture(text, fnt.dynamicFontSize, fnt.dynamicFontStyle);
}
}