internal static T FindDescendantView <T>(this UIView view) where T : UIView
        {
            var queue = new FormsQueue <UIView>();

            queue.Enqueue(view);

            while (queue.Count > 0)
            {
                var descendantView = queue.Dequeue();

                var result = descendantView as T;
                if (result != null)
                {
                    return(result);
                }

                for (var i = 0; i < descendantView.Subviews?.Length; i++)
                {
                    queue.Enqueue(descendantView.Subviews[i]);
                }
            }

            return(null);
        }