Three questions (added another):
1) For UITable, it doesn't reposition right away on the first update until it grabs a reference to the panel. If you don't use keep within panel there doesn't appear to be a reason to wait until the update. Can you allow Reposition () to fire immediately when KeepWithinPanel is false and initdone is false?
if (Application.isPlaying && !mInitDone && NGUITools.GetActive(this) && keepWithinPanel)
{
When I put this in, it resolves a lot of problems that require me to wait a frame. You could also put in a little optimization to not bother grabbing the panel if KeepWithinPanel is false. I know I could subscribe to the OnReposition event, but this works better IMHO.
2) Can we get an event for panel dimensions changing? I dynamically change clipping areas of panels in scroll views and I need to propagate those changes to subscribers so they can adjust their dimensions in some cases. There is a panel OnChange, but it handles a different use case than UIWidget OnChange (which handles dimensions). Why not add a OnDimensionChanged event to the UIRect that both UIWidget and UIPanel inherit?
3) Any way you could make the isEnabled in UIButton virtual? I inherit from this class and override this behavior since UIButton expects a collider and disables itself without one. Instead, I am using it without a collider and pushing events to it manually from underlying colliders (I use this for RowHover highlights on my multi-column list control). This one is debatable, but I don't see any harm in it.
3.09 f4