public override void ViewDidLayoutSubviews( ) { base.ViewDidLayoutSubviews( ); HeaderLabel.Frame = new CGRect(0, View.Frame.Height * .05f, View.Frame.Width, HeaderLabel.Bounds.Height); Version.Layer.Position = new CGPoint((View.Bounds.Width - Version.Bounds.Width) / 2, HeaderLabel.Frame.Bottom); // measure and size the username field UserNameField.Bounds = new CGRect(0, 0, View.Bounds.Width * .40f, 0); CGSize size = UserNameField.SizeThatFits(UserNameField.Bounds.Size); UserNameField.Bounds = new CGRect(UserNameField.Bounds.X, UserNameField.Bounds.Y, UserNameField.Bounds.Width, (float)System.Math.Ceiling(size.Height * 1.25f)); UserNameField.Layer.Position = new CGPoint((View.Bounds.Width - UserNameField.Bounds.Width) / 2, HeaderLabel.Frame.Bottom + 50); PasswordField.Bounds = new CGRect(0, 0, View.Bounds.Width * .40f, 0); size = PasswordField.SizeThatFits(PasswordField.Bounds.Size); PasswordField.Bounds = new CGRect(PasswordField.Bounds.X, PasswordField.Bounds.Y, PasswordField.Bounds.Width, (float)System.Math.Ceiling(size.Height * 1.25f)); PasswordField.Layer.Position = new CGPoint((View.Bounds.Width - PasswordField.Bounds.Width) / 2, UserNameField.Frame.Bottom + 10); LoginButton.Bounds = new CGRect(0, 0, 100, LoginButton.Bounds.Height); LoginButton.Layer.Position = new CGPoint((View.Bounds.Width - LoginButton.Bounds.Width) / 2, PasswordField.Frame.Bottom + 30); LoginResult.Frame = new CGRect(0, LoginButton.Frame.Bottom + 20, View.Frame.Width, LoginResult.Bounds.Height); float width = 100; float height = 100; BusyIndicator.Frame = new RectangleF(((float)View.Bounds.Width - width) / 2, (float)LoginButton.Frame.Bottom + 100, width, height); }