iOS: adoptar correctamente una vista en un padre ya visible

Tengo el siguiente código para adoptar un controller de vista secundaria en un padre:

public static void AdoptViewController(this UIViewController parent, UIViewController child) { parent.AddChildViewController(child); parent.View.AddSubview(child.View); child.DidMoveToParentViewController(parent); } 

Esto generalmente funciona bien, excepto cuando la vista padre ya está visible. En tales casos, el controller de vista secundaria no recibe un evento ViewWillAppear . Esto está causando problemas en mi aplicación.

Encontré esta publicación , que sugiere hacer esto:

 public static void AdoptViewController(this UIViewController parent, UIViewController child) { parent.AddChildViewController(child); child.BeginAppearanceTransition(true, false); parent.View.AddSubview(child.View); child.EndAppearanceTransition(); child.DidMoveToParentViewController(parent); } 

Sin embargo, eso provoca que el evento ViewWillAppear se ViewWillAppear dos veces en el caso en que el elemento principal aún no esté visible. Volví a trabajar el código un poco para esto:

 public static void AdoptViewController(this UIViewController parent, UIViewController child) { parent.AddChildViewController(child); // could also use ViewIfLoaded for later iOS versions var parentAlreadyVisible = parent.IsViewLoaded && parent.Window != null; if (parentAlreadyVisible) { child.BeginAppearanceTransition(true, false); } parent.View.AddSubview(child.View); if (parentAlreadyVisible) { child.EndAppearanceTransition(); } child.DidMoveToParentViewController(parent); } 

Esto parece funcionar en su mayoría bien, excepto que ahora mi evento ViewDidAppear se dispara dos veces en la vista secundaria. La primera vez que lo desencadena EndAppearanceTransition , y la segunda vez parece provenir del propio iOS. Esto en realidad no me causa ningún problema, pero es desconcertante, no obstante.

¿Cómo escribo un método de utilidad independiente de AdoptViewController que adopta correctamente un controller de vista secundario en un elemento primario y eleva los events correctos el número correcto de veces?