У меня есть представление, содержащее UIScrollview с различными UITextField, содержащимися в представлении прокрутки. Когда я нажимаю на UITextField для ввода данных, UITextField прокручивается вверх до подпредставлений над UIScrolView и скрывается из поля зрения. Я использую решение для уведомлений Kewboard, которое я нашел здесь, на StackOverflow, но оно не работает, когда присутствует прокрутка. Что мне нужно сделать, чтобы поднять все представление так, чтобы текстовая запись была видна?
Мой код:
Представление отображается правильно со всеми присутствующими подпредставлениями. Код, который должен поднимать представление при появлении клавиатуры:
public static class ViewExtensions
{
public static UIView FindFirstResponder(this UIView view)
{
if (view.IsFirstResponder)
{
return view;
}
foreach (UIView subView in view.Subviews)
{
var firstResponder = subView.FindFirstResponder();
if (firstResponder != null)
return firstResponder;
}
return null;
}
public static UIView FindSuperviewOfType(this UIView view, UIView stopAt, Type type)
{
if (view.Superview != null)
{
if (type.IsAssignableFrom(view.Superview.GetType()))
{
return view.Superview;
}
if (view.Superview != stopAt)
return view.Superview.FindSuperviewOfType(stopAt, type);
}
return null;
}
}
При нажатии на текстовое представление DOB оно исчезает под подпредставлениями, расположенными над представлением прокрутки. Я перепробовал все, что мог придумать, и различные методы, которые нашел в Интернете, но ничего не появилось. иметь какой-либо эффект. Есть предложения?
У меня есть представление, содержащее UIScrollview с различными UITextField, содержащимися в представлении прокрутки. Когда я нажимаю на UITextField для ввода данных, UITextField прокручивается вверх до подпредставлений над UIScrolView и скрывается из поля зрения. Я использую решение для уведомлений Kewboard, которое я нашел здесь, на StackOverflow, но оно не работает, когда присутствует прокрутка. Что мне нужно сделать, чтобы поднять все представление так, чтобы текстовая запись была видна? Мой код: [code] public override void ViewDidLoad() { this.NavigationItem.SetHidesBackButton(true, false); btnExit.Hidden = false; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var NavBarHeight = UIApplication.SharedApplication.StatusBarFrame.Size.Height + (NavigationController?.NavigationBar.Frame.Height ?? 0.0); RegisterForKeyboardNotifications();
scrollView = new UIScrollView { Frame = new CGRect(0, 0, View.Frame.Width, h + 2 * padding), ContentSize = new SizeF((w + padding) * 7, (h + padding) * n), BackgroundColor = UIColor.White, AutoresizingMask = UIViewAutoresizing.FlexibleWidth }; . . . . Bunch of irrelevant code creating subviews to add to scrollview . . .
// If activeField is hidden by keyboard, scroll it so it's visible RectangleF viewRectAboveKeyboard = new RectangleF((PointF)this.View.Frame.Location, new SizeF((float)this.View.Frame.Width, (float)(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 PointF scrollPoint = new PointF(0.0f, (float)(activeFieldAbsoluteFrame.Location.Y + activeFieldAbsoluteFrame.Height + scrollView.ContentOffset.Y - viewRectAboveKeyboard.Height)); scrollView.SetContentOffset(scrollPoint, true); } }
UIScrollView scrollView = activeView.FindSuperviewOfType(this.View, typeof(UIScrollView)) as UIScrollView; if (scrollView == null) return;
// Reset the content inset of the scrollView and animate using the current keyboard animation duration double animationDuration = UIKeyboard.AnimationDurationFromNotification(notification); UIEdgeInsets contentInsets = new UIEdgeInsets(0.0f, 0.0f, 0.0f, 0.0f); UIView.Animate(animationDuration, delegate { scrollView.ContentInset = contentInsets; scrollView.ScrollIndicatorInsets = contentInsets; }); } [/code] Просмотр класса расширений: [code]public static class ViewExtensions { public static UIView FindFirstResponder(this UIView view) { if (view.IsFirstResponder) { return view; } foreach (UIView subView in view.Subviews) { var firstResponder = subView.FindFirstResponder(); if (firstResponder != null) return firstResponder; } return null; }
public static UIView FindSuperviewOfType(this UIView view, UIView stopAt, Type type) { if (view.Superview != null) { if (type.IsAssignableFrom(view.Superview.GetType())) { return view.Superview; }
if (view.Superview != stopAt) return view.Superview.FindSuperviewOfType(stopAt, type); }
return null; }
} [/code] При нажатии на текстовое представление DOB оно исчезает под подпредставлениями, расположенными над представлением прокрутки. Я перепробовал все, что мог придумать, и различные методы, которые нашел в Интернете, но ничего не появилось. иметь какой-либо эффект. Есть предложения?