title: Why is my UIAnimate call animating instantaneously?
body: <p>I have a UILabel that I show at the top of a view while it is loading. Essentially, on <code>ViewDidAppear</code>, I call <code>ShowLoadingMessage(true)</code>, then fire my async network calls. When the calls are completed and successful, I call <code>ShowLoadingMessage(false)</code>.</p>
  
  <p>The end result is that the label goes from 0 to 40, and regardless as to when the async call completes (nearly instantaneously or many seconds later), the bar just instantly disappears.</p>
  
  <p>The expected behaviour I want is for it to call into this function, slide open the <code>LoadingMessageBar</code> <code>UILabel</code> by expanding the height to 40, then shrink height back to 0 <em>after the call is completed</em>. <strong>I am not using the Y value because the message bar is a window object and will appear above the navigation bar.</strong></p>
  
  <pre><code>private void ShowLoadingMessage(bool isLoading)
  {
      UIView.Animate(0.2f, () =&gt;
      {
          if (isLoading) this.LoadingMessageBar.SetHeight(35);
          else this.LoadingMessageBar.SetHeight(0);
      });
  }
  
  // Shorthand method for updating the height of the frame of a UIView
  public static float SetHeight(this UIView view, float height)
  {
      view.Frame = new RectangleF(view.Frame.X, view.Frame.Y, view.Frame.Width, height);
  
      return view.Frame.Height;
  }
  </code></pre>
  
  <p>I've tried using a lock to no avail. I've tried using the Y value of the Frame and then setting the Hidden property on completion. I can't seem to get it to avoid the instantaneous second call.</p>
  
  <p>Any thoughts as to why it isn't behaving as expected?</p>