internal void MakeVisible(NSView view, BringIntoViewMode?bringIntoViewMode, bool useForcedAnimation = false) { if (view == null) { return; } if (bringIntoViewMode == null) { return; } var scrollView = view.FindSuperviewsOfType <NSScrollView>().LastOrDefault(); _scrollViewModifiedForKeyboard = new WeakReference <NSScrollView>(scrollView); if (scrollView == null) { this.Log().Warn("Keyboard will show, but we cannot find any ScrollView with enough space for the currently focused view, so it's impossible to ensure that it's visible."); return; } var scrollViewRectInWindow = scrollView.ConvertRectFromView(scrollView.Bounds, scrollView); var keyboardTop = (nfloat)_inputPane.OccludedRect.Top; var keyboardOverlap = scrollViewRectInWindow.Bottom - keyboardTop; if (keyboardOverlap > 0) { scrollView.ContentInsets = new NSEdgeInsets(0, 0, keyboardOverlap, 0); } var viewRectInScrollView = CGRect.Empty; if (!(view is TextBox)) { // We want to scroll to the textbox and not the inner textview. view = view.FindFirstParent <TextBox>() ?? view; } viewRectInScrollView = scrollView.ConvertRectFromView(view.Bounds, view); scrollView.ScrollRectToVisible(viewRectInScrollView); }