protected virtual void KeyboardWillShow(NSNotification notification) { var keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); OnKeyboardChanged(keyboardFrame.Height); }
void OnKeyBoardEnabled(NSNotification notification) { if (!IsViewLoaded) { return; } var pageBounds = Element.Bounds; double yPosition = UIKeyboard.FrameBeginFromNotification(notification).Y - UIKeyboard.FrameEndFromNotification(notification).Y; var propertiesViewBounds = new Rectangle(Element.PropertiesView.X, Element.PropertiesView.Y - yPosition, Element.PropertiesView.Width, Element.PropertiesView.Height); Element.PropertiesView.Layout(propertiesViewBounds); }
void OnKeyboardNotification(NSNotification notification) { if (!IsViewLoaded) { return; } var frameBegin = UIKeyboard.FrameBeginFromNotification(notification); var frameEnd = UIKeyboard.FrameEndFromNotification(notification); /* * UIView activeView = KeyboardGetActiveView(); * if (activeView == null) * return; * * UIScrollView scrollView = activeView.FindSuperviewOfType(this.View, typeof(UIScrollView)) as UIScrollView; * if (scrollView == null) * return; * * RectangleF keyboardBounds = (RectangleF)UIKeyboard.FrameBeginFromNotification(notification); * * UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, keyboardBounds.Size.Height, 0.0f); * scrollView.ContentInset = contentInsets; * scrollView.ScrollIndicatorInsets = contentInsets; * * // If activeField is hidden by keyboard, scroll it so it's visible * CGRect viewRectAboveKeyboard = new CGRect(this.View.Frame.Location, new CGSize(this.View.Frame.Width, this.View.Frame.Size.Height - keyboardBounds.Size.Height)); * * RectangleF activeFieldAbsoluteFrame = (RectangleF)activeView.Superview.ConvertRectToView(activeView.Frame, this.View); * // activeFieldAbsoluteFrame is relative to this.View so does not include any scrollView.ContentOffset * * // Check if the activeField will be partially or entirely covered by the keyboard * if (!viewRectAboveKeyboard.Contains(activeFieldAbsoluteFrame)) * { * // Scroll to the activeField Y position + activeField.Height + current scrollView.ContentOffset.Y - the keyboard Height * CGPoint scrollPoint = new CGPoint(0.0f, activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + scrollView.ContentOffset.Y - viewRectAboveKeyboard.Height); * scrollView.SetContentOffset(scrollPoint, true); * }*/ /* var page = Element as ContentPage; * if (page != null && !(page.Content is ScrollView)) * { * * var padding = page.Padding; * page.Padding = new Thickness(padding.Left, padding.Top, padding.Right, padding.Bottom + frameBegin.Top - frameEnd.Top); * } */ var bounds = Element.Bounds; var newBounds = new Rectangle(bounds.Left, bounds.Top, bounds.Width, bounds.Height - frameBegin.Top + frameEnd.Top); Element.Layout(newBounds); var cp = Element as SpixiContentPage; if (cp != null) { cp.recalculateLayout(); } /* //Check if the keyboard is becoming visible * var visible = notification.Name == UIKeyboard.WillShowNotification; * * //Pass the notification, calculating keyboard height, etc. * bool landscape = InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || InterfaceOrientation == UIInterfaceOrientation.LandscapeRight; * var keyboardFrame = visible * ? UIKeyboard.FrameEndFromNotification(notification) * : UIKeyboard.FrameBeginFromNotification(notification); * * //OnKeyboardChanged(visible, landscape ? keyboardFrame.Width : keyboardFrame.Height);*/ }
private void KeyBoardUpNotification(NSNotification notifi) { _keyboardBounds = UIKeyboard.BoundsFromNotification(notifi); ViewDidLayoutSubviews(); }
void PositionHUD(NSNotification notification) { float keyboardHeight = 0; double animationDuration = 0; UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation; if (notification != null) { RectangleF keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); if (notification.Name == UIKeyboard.WillShowNotification || notification.Name == UIKeyboard.DidShowNotification) { if (IsPortrait(orientation)) { keyboardHeight = keyboardFrame.Size.Height; } else { keyboardHeight = keyboardFrame.Size.Width; } } else { keyboardHeight = 0; } } else { keyboardHeight = VisibleKeyboardHeight; } RectangleF orientationFrame = UIScreen.MainScreen.Bounds; RectangleF statusBarFrame = UIApplication.SharedApplication.StatusBarFrame; if (IsLandscape(orientation)) { orientationFrame.Size = new SizeF(orientationFrame.Size.Height, orientationFrame.Size.Width); statusBarFrame.Size = new SizeF(statusBarFrame.Size.Height, statusBarFrame.Size.Width); } float activeHeight = orientationFrame.Size.Height; if (keyboardHeight > 0) { activeHeight += statusBarFrame.Size.Height * 2; } activeHeight -= keyboardHeight; float posY = (float)Math.Floor(activeHeight * 0.45); float posX = orientationFrame.Size.Width / 2; if (!showToastCentered) { posY = activeHeight - 40; } PointF newCenter; float rotateAngle; switch (orientation) { case UIInterfaceOrientation.PortraitUpsideDown: rotateAngle = (float)Math.PI; newCenter = new PointF(posX, orientationFrame.Size.Height - posY); break; case UIInterfaceOrientation.LandscapeLeft: rotateAngle = (float)(-Math.PI / 2.0f); newCenter = new PointF(posY, posX); break; case UIInterfaceOrientation.LandscapeRight: rotateAngle = (float)(Math.PI / 2.0f); newCenter = new PointF(orientationFrame.Size.Height - posY, posX); break; default: // as UIInterfaceOrientationPortrait rotateAngle = 0.0f; newCenter = new PointF(posX, posY); break; } if (notification != null) { UIView.Animate(animationDuration, 0, UIViewAnimationOptions.AllowUserInteraction, delegate { MoveToPoint(newCenter, rotateAngle); }, null); } else { MoveToPoint(newCenter, rotateAngle); } }
public void ResetContentInset(NSNotification notification) { UIView activeView = KeyboardGetActiveView(); if (activeView == null) { return; } if (scrollType == ScrollType.SCROLLVIEW) { UIScrollView scrollView = activeView.FindSuperviewOfType(parentView, typeof(UIScrollView)) as UIScrollView; if (scrollView == null) { return; } double animationDuration = 0.3f; if (notification != null) { animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); } UIView.Animate(animationDuration, delegate { scrollView.ContentInset = UIEdgeInsets.Zero; scrollView.ScrollIndicatorInsets = UIEdgeInsets.Zero; }); } else if (scrollType == ScrollType.TABLEVIEW) { UITableView tableView = activeView.FindSuperviewOfType(parentView, typeof(UITableView)) as UITableView; if (tableView == null) { return; } double animationDuration = 0.3f; if (notification != null) { animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); } UIView.Animate(animationDuration, delegate { tableView.ContentInset = UIEdgeInsets.Zero; tableView.ScrollIndicatorInsets = UIEdgeInsets.Zero; }); } else if (scrollType == ScrollType.TEXTVIEW) { UITextView textView = activeView.FindSuperviewOfType(parentView, typeof(UITextView)) as UITextView; if (textView == null) { return; } double animationDuration = 0.3f; if (notification != null) { animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); } UIView.Animate(animationDuration, delegate { textView.ContentInset = UIEdgeInsets.Zero; textView.ScrollIndicatorInsets = UIEdgeInsets.Zero; }); } }
private void OnKeyboardNotification(NSNotification notification) { if (IsViewLoaded) { //Check if the keyboard is becoming visible bool visible = notification.Name == UIKeyboard.WillShowNotification; UIView activeView = FindFirstResponder(View); //Start an animation, using values from the keyboard UIView.BeginAnimations("AnimateForKeyboard"); UIView.SetAnimationBeginsFromCurrentState(true); UIView.SetAnimationDuration(UIKeyboard.AnimationDurationFromNotification(notification)); UIView.SetAnimationCurve((UIViewAnimationCurve)UIKeyboard.AnimationCurveFromNotification(notification)); //Pass the notification, calculating keyboard height, etc. bool landscape = InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || InterfaceOrientation == UIInterfaceOrientation.LandscapeRight; if (visible) { nfloat h = 0; if (activeView != null) { h = activeView.Frame.Y; UIView super = activeView.Superview; while (super != null) { if (typeof(UIScrollView) == super.GetType()) { h = h + super.Frame.Y - ((UIScrollView)super).ContentOffset.Y; } else { h = h + super.Frame.Y; } super = super.Superview; } } var keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); OnKeyboardChanged(visible, keyboardFrame.Height, h); //OnKeyboardChanged (visible, landscape ? keyboardFrame.Width : keyboardFrame.Height,activeView.Frame.Y); } else { nfloat h = 0; if (activeView != null) { h = activeView.Frame.Y; UIView super = activeView.Superview; while (super != null) { if (typeof(UIScrollView) == super.GetType()) { h = h + super.Frame.Y - ((UIScrollView)super).ContentOffset.Y; } else { h = h + super.Frame.Y; } super = super.Superview; } } var keyboardFrame = UIKeyboard.FrameBeginFromNotification(notification); OnKeyboardChanged(visible, keyboardFrame.Height, h); //OnKeyboardChanged (visible, landscape ? keyboardFrame.Width : keyboardFrame.Height,activeView.Frame.Y); } //Commit the animation UIView.CommitAnimations(); } }
/// <summary> /// Handleses the keyboard notifications. /// </summary> /// <param name="notification">Notification.</param> private void HandlesKeyboardNotifications(NSNotification notification) { // Check if the keyboard is becoming visible bool keyboardVisibile = notification.Name == UIKeyboard.WillShowNotification; // Start an animation, using values from the keyboard UIView.BeginAnimations("AnimateForKeyboard"); UIView.SetAnimationBeginsFromCurrentState(true); UIView.SetAnimationDuration(UIKeyboard.AnimationDurationFromNotification(notification) <= 0.0f ? 0.3f : UIKeyboard.AnimationDurationFromNotification(notification)); UIView.SetAnimationCurve((UIViewAnimationCurve)UIKeyboard.AnimationCurveFromNotification(notification)); // Pass the notification, calculating keyboard height, etc. bool landscape = InterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || InterfaceOrientation == UIInterfaceOrientation.LandscapeRight; if (keyboardVisibile) { var keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); _keyboardChanged.OnNext(new KeyboardData { IsVisible = keyboardVisibile, Height = landscape ? keyboardFrame.Width : keyboardFrame.Height }); } else { var keyboardFrame = UIKeyboard.FrameBeginFromNotification(notification); _keyboardChanged.OnNext(new KeyboardData { IsVisible = keyboardVisibile, Height = landscape ? keyboardFrame.Width : keyboardFrame.Height }); } // Commit the animation UIView.CommitAnimations(); }
protected override void KeyBoardUpNotification(NSNotification notification) { tagsTableView.ContentInset = new UIEdgeInsets(0, 0, UIKeyboard.FrameEndFromNotification(notification).Height, 0); base.KeyBoardUpNotification(notification); }
private void OnKeyboardNotification(NSNotification notification) { if (!IsViewLoaded) { return; } //Check if the keyboard is becoming visible var visible = notification.Name == UIKeyboard.WillShowNotification; //Pass the notification, calculating keyboard height, etc. var keyboardFrame = visible ? UIKeyboard.FrameEndFromNotification(notification) : UIKeyboard.FrameBeginFromNotification(notification); OnKeyboardChanged(visible, ((float)keyboardFrame.Height)); }
/// <summary> /// Raises the keyboard notification event. /// </summary> /// <param name="notification">Notification.</param> private void OnKeyboardNotification(NSNotification notification) { try { if (!IsViewLoaded) { return; } //Check if the keyboard is becoming visible var visible = notification.Name == UIKeyboard.WillShowNotification; //Start an animation, using values from the keyboard UIView.BeginAnimations("AnimateForKeyboard"); UIView.SetAnimationBeginsFromCurrentState(true); UIView.SetAnimationDuration(UIKeyboard.AnimationDurationFromNotification(notification)); UIView.SetAnimationCurve((UIViewAnimationCurve)UIKeyboard.AnimationCurveFromNotification(notification)); var keyboardFrame = visible ? UIKeyboard.FrameEndFromNotification(notification) : UIKeyboard.FrameBeginFromNotification(notification); // Move up the textfield when the keyboard comes up if (visible) { loginScrollView.ContentOffset = new CGPoint(0, keyboardFrame.Height / 2); } else { loginScrollView.ContentOffset = new CGPoint(0, 0); } //Commit the animation UIView.CommitAnimations(); } catch (Exception ex) { Debug.WriteLine("Exception Occured in OnKeyBoardNotification method due to " + ex.Message); } }
private void OnKeyboardNotification(NSNotification notification) { if (!IsViewLoaded) { return; } var visible = notification.Name == UIKeyboard.WillShowNotification; var keyboardFrame = visible ? UIKeyboard.FrameEndFromNotification(notification) : UIKeyboard.FrameBeginFromNotification(notification); OnKeyboardChanged(visible, keyboardFrame.Height); }
void keyboardWillHide(NSNotification notification) { CGRect bounds = UIKeyboard.BoundsFromNotification(notification); moveView(bounds, notification); }
private void OnKeyboardNotification(NSNotification notification) { float neededOffset = 0; var visible = notification.Name == UIKeyboard.WillShowNotification; var keyboardFrame = visible ? UIKeyboard.FrameEndFromNotification(notification) : UIKeyboard.FrameBeginFromNotification(notification); if (visible) { KeyboardShown?.Invoke(this, (float)keyboardFrame.Height); } var parentView = UIApplication.SharedApplication.KeyWindow.RootViewController.View; bool isSubview = false; var responder = InputTools.FindFirstResponder(parentView); if ((responder == null) && (UIApplication.SharedApplication.KeyWindow.Subviews != null)) { foreach (var subview in UIApplication.SharedApplication.KeyWindow.Subviews) { responder = InputTools.FindFirstResponder(subview); if (responder != null) { parentView = subview; isSubview = true; break; } } } if (responder != null) { var offsetFromBottom = getOffsetFromBottom(responder); if (responder.Tag > 0) { var views = getTaggedViews(parentView, responder.Tag); if (views.Any()) { var offsets = new List <nfloat>(); foreach (var view in views) { offsets.Add(getOffsetFromBottom(view)); } offsetFromBottom = offsets.Min(); } } if (keyboardFrame.Height > offsetFromBottom) { neededOffset = (float)(keyboardFrame.Height - offsetFromBottom + responder.Frame.Height); } } if ((KeyboardChanged != null) && ((neededOffset > 0) || !visible)) { if (isSubview) { parentView.Transform = CoreGraphics.CGAffineTransform.MakeTranslation(0, -neededOffset); } else { KeyboardChanged(this, new KeyboardHelperEventArgs(visible, (float)keyboardFrame.Height, neededOffset)); } } }
private void KeyBoardUpNotification(NSNotification notifi) { _keyboardBounds = UIKeyboard.BoundsFromNotification(notifi); UpdateElementSize(); }
public override void ViewDidAppear(bool animated) { base.ViewDidAppear(animated); if (!Utility.IsIPad) { obs1 = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidShowNotification, delegate(NSNotification n) { if (isKeyboardVisible && isOptionVisible) { var kbdRect = UIKeyboard.FrameEndFromNotification(n); var duration = UIKeyboard.AnimationDurationFromNotification(n); var frame = optionView.Frame; frame.Y = 66; frame.Height = this.View.Frame.Height - kbdRect.Height; UIView.BeginAnimations("ResizeForKeyboard"); UIView.SetAnimationDuration(duration); optionView.Frame = frame; UIView.CommitAnimations(); isKeyboardVisible = false; isOptionsKeyboard = true; } }); obs2 = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillHideNotification, delegate(NSNotification n) { if (isOptionsKeyboard && isOptionVisible) { var duration = UIKeyboard.AnimationDurationFromNotification(n); UIView.BeginAnimations("ResizeForKeyboard"); UIView.SetAnimationDuration(duration); optionView.Frame = new CGRect(0, this.View.Bounds.Height - this.View.Bounds.Height / 1.5, this.View.Bounds.Width, this.View.Bounds.Height / 1.5); UIView.CommitAnimations(); isKeyboardVisible = true; isOptionsKeyboard = false; } }); } if (indexPath != null) { var cell = collectionView.CellForItem(indexPath); if (cell != null) { deselectedButton = (UIButton)cell.ViewWithTag(500); deselectedButtonX = (UIButton)cell.ViewWithTag(510); } collectionView.SelectItem(indexPath, true, UICollectionViewScrollPosition.CenteredHorizontally); } if (!codeVisited) { UIView.Animate(0.5, 0, UIViewAnimationOptions.CurveLinear, () => { overlayTags.Alpha = 1.0f; }, () => { UIView.Animate(3.0, () => { overlayTags.Alpha = 0.0f; }); } ); } }
private void KeyboardUpNotification(NSNotification notification) { var keyboardFrame = UIKeyboard.BoundsFromNotification(notification); entryEffect.OnKeyboardRectChanged(new Rect(keyboardFrame.X, keyboardFrame.Y, keyboardFrame.Width, keyboardFrame.Height)); }
void PositionHUD(NSNotification notification) { nfloat keyboardHeight = 0; double animationDuration = 0; Frame = UIScreen.MainScreen.Bounds; UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation; bool ignoreOrientation = UIDevice.CurrentDevice.CheckSystemVersion(8, 0); if (notification != null) { var keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); if (notification.Name == UIKeyboard.WillShowNotification || notification.Name == UIKeyboard.DidShowNotification) { if (ignoreOrientation || IsPortrait(orientation)) { keyboardHeight = keyboardFrame.Size.Height; } else { keyboardHeight = keyboardFrame.Size.Width; } } else { keyboardHeight = 0; } } else { keyboardHeight = VisibleKeyboardHeight; } CGRect orientationFrame = this.Window.Bounds; CGRect statusBarFrame = UIApplication.SharedApplication.StatusBarFrame; if (!ignoreOrientation && IsLandscape(orientation)) { orientationFrame.Size = new CGSize(orientationFrame.Size.Height, orientationFrame.Size.Width); statusBarFrame.Size = new CGSize(statusBarFrame.Size.Height, statusBarFrame.Size.Width); } var activeHeight = orientationFrame.Size.Height; if (keyboardHeight > 0) { activeHeight += statusBarFrame.Size.Height * 2; } activeHeight -= keyboardHeight; nfloat posY = (float)Math.Floor(activeHeight * 0.45); nfloat posX = orientationFrame.Size.Width / 2; nfloat textHeight = _stringLabel.Frame.Height / 2 + 40; switch (toastPosition) { case ToastPosition.Bottom: posY = activeHeight - textHeight; break; case ToastPosition.Center: // Already set above break; case ToastPosition.Top: posY = textHeight; break; default: break; } CGPoint newCenter; float rotateAngle; if (ignoreOrientation) { rotateAngle = 0.0f; newCenter = new CGPoint(posX, posY); } else { switch (orientation) { case UIInterfaceOrientation.PortraitUpsideDown: rotateAngle = (float)Math.PI; newCenter = new CGPoint(posX, orientationFrame.Size.Height - posY); break; case UIInterfaceOrientation.LandscapeLeft: rotateAngle = (float)(-Math.PI / 2.0f); newCenter = new CGPoint(posY, posX); break; case UIInterfaceOrientation.LandscapeRight: rotateAngle = (float)(Math.PI / 2.0f); newCenter = new CGPoint(orientationFrame.Size.Height - posY, posX); break; default: // as UIInterfaceOrientationPortrait rotateAngle = 0.0f; newCenter = new CGPoint(posX, posY); break; } } if (notification != null) { UIView.Animate(animationDuration, 0, UIViewAnimationOptions.AllowUserInteraction, delegate { MoveToPoint(newCenter, rotateAngle); }, null); } else { MoveToPoint(newCenter, rotateAngle); } }
void HandleKeyboardState(NSNotification notification) { keyboardBounds = UIKeyboard.BoundsFromNotification(notification); View.Center = new CGPoint(View.Bounds.GetMidX(), View.Bounds.GetMidY() - keyboardBounds.Height); SetViewMovedUp(!keyboardBounds.IsEmpty); }
private void KeyboardDidShow(NSNotification notification) { var keyboardFrame = UIKeyboard.FrameEndFromNotification(notification); KeyboardWillChange(keyboardFrame.Height, notification); }
protected virtual void KeyboardWillShowNotification(NSNotification notification) { UIView activeView = KeyboardGetActiveView(); if (activeView == null) { return; } CGRect keyboardBounds = UIKeyboard.FrameBeginFromNotification(notification); if (scrollType == ScrollType.SCROLLVIEW) { UIScrollView scrollView = activeView.FindSuperviewOfType(parentView, typeof(UIScrollView)) as UIScrollView; if (scrollView == null) { return; } nfloat keyboardHeight; if (keyboardBounds.Size.Height > keyboardBounds.Size.Width) { keyboardHeight = keyboardBounds.Size.Width; } else { keyboardHeight = keyboardBounds.Size.Height; } UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, keyboardHeight, 0.0f); scrollView.ContentInset = contentInsets; scrollView.ScrollIndicatorInsets = contentInsets; // If activeField is hidden by keyboard, scroll it so it's visible CGRect viewRectAboveKeyboard = new CGRect(parentView.Frame.Location, new CGSize(parentView.Frame.Width, parentView.Frame.Size.Height - keyboardHeight)); // activeFieldAbsoluteFrame is relative to this.View so does not include any scrollView.ContentOffset CGRect activeFieldAbsoluteFrame = activeView.Superview.ConvertRectToView(activeView.Frame, parentView); // Check if the activeField will be partially or entirely covered by the keyboard if (!viewRectAboveKeyboard.Contains(activeFieldAbsoluteFrame)) { // Scroll to the activeField Y position + activeField.Height + current scrollView.ContentOffset.Y - the keyboard Height CGPoint scrollPoint = new CGPoint(0.0f, activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + scrollView.ContentOffset.Y - viewRectAboveKeyboard.Height); scrollView.SetContentOffset(scrollPoint, true); } } else if (scrollType == ScrollType.TABLEVIEW) { UITableView tableView = activeView.FindSuperviewOfType(parentView, typeof(UITableView)) as UITableView; if (tableView == null) { return; } nfloat keyboardHeight; if (keyboardBounds.Size.Height > keyboardBounds.Size.Width) { keyboardHeight = keyboardBounds.Size.Width; } else { keyboardHeight = keyboardBounds.Size.Height; } UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, keyboardHeight, 0.0f); tableView.ContentInset = contentInsets; tableView.ScrollIndicatorInsets = contentInsets; // If activeField is hidden by keyboard, scroll it so it's visible CGRect viewRectAboveKeyboard = new CGRect(parentView.Frame.Location, new CGSize(parentView.Frame.Width, parentView.Frame.Size.Height - keyboardHeight)); // activeFieldAbsoluteFrame is relative to this.View so does not include any tableView.ContentOffset CGRect activeFieldAbsoluteFrame = activeView.Superview.ConvertRectToView(activeView.Frame, parentView); // Check if the activeField will be partially or entirely covered by the keyboard if (!viewRectAboveKeyboard.Contains(activeFieldAbsoluteFrame)) { // Scroll to the activeField Y position + activeField.Height + current tableView.ContentOffset.Y - the keyboard Height CGPoint scrollPoint = new CGPoint(0.0f, activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + tableView.ContentOffset.Y - viewRectAboveKeyboard.Height); tableView.SetContentOffset(scrollPoint, true); } } else if (scrollType == ScrollType.TEXTVIEW) { UITextView textView = activeView as UITextView; if (textView == null) { return; } nfloat keyboardHeight; if (keyboardBounds.Size.Height > keyboardBounds.Size.Width) { keyboardHeight = keyboardBounds.Size.Width; } else { keyboardHeight = keyboardBounds.Size.Height; } UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, keyboardHeight, 0.0f); textView.ContentInset = contentInsets; textView.ScrollIndicatorInsets = contentInsets; // If activeField is hidden by keyboard, scroll it so it's visible CGRect viewRectAboveKeyboard = new CGRect(parentView.Frame.Location, new CGSize(parentView.Frame.Width, parentView.Frame.Size.Height - keyboardHeight)); // activeFieldAbsoluteFrame is relative to this.View so does not include any tableView.ContentOffset CGRect activeFieldAbsoluteFrame = activeView.Superview.ConvertRectToView(activeView.Frame, parentView); // Check if the activeField will be partially or entirely covered by the keyboard if (!viewRectAboveKeyboard.Contains(activeFieldAbsoluteFrame)) { // Scroll to the activeField Y position + activeField.Height + current tableView.ContentOffset.Y - the keyboard Height CGPoint scrollPoint = new CGPoint(0.0f, activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + textView.ContentOffset.Y - viewRectAboveKeyboard.Height); textView.SetContentOffset(scrollPoint, true); } } if (KeyboardWillShowEvent != null) { KeyboardWillShowEvent(keyboardBounds); } }