У меня есть UITextField. Мягкая клавиатура закрывает UITextField, когда я нажимаю.
Как перемещать макет, поэтому я хочу, чтобы он показывался над клавиатурой.
Спасибо заранее.Как переместить макет, когда клавиатура программного обеспечения отображается в Xamarin.iOS
ответ
увидеть образец implimentation
Переменные для контроллера, который вмещает в себя текстовые поля
private UIView activeview; // Controller that activated the keyboard
private float scroll_amount = 0.0f; // amount to scroll
private float bottom = 0.0f; // bottom point
private float offset = 10.0f; // extra offset
private bool moveViewUp = false; // which direction are we moving
клавиатуры для наблюдателей ViewDidLoad().
// Keyboard popup
NSNotificationCenter.DefaultCenter.AddObserver
(UIKeyboard.DidShowNotification,KeyBoardUpNotification);
// Keyboard Down
NSNotificationCenter.DefaultCenter.AddObserver
(UIKeyboard.WillHideNotification,KeyBoardDownNotification);
Прежде всего, это метод KeyboardUpNotification. По сути, вы вычисляете, будет ли элемент управления скрыт от клавиатуры, и если да, то подсчитайте, сколько нужно отобразить представление, чтобы показать элемент управления, а затем переместите его.
private void KeyBoardUpNotification(NSNotification notification)
{
// get the keyboard size
RectangleF r = UIKeyboard.BoundsFromNotification (notification);
// Find what opened the keyboard
foreach (UIView view in this.View.Subviews) {
if (view.IsFirstResponder)
activeview = view;
}
// Bottom of the controller = initial position + height + offset
bottom = (activeview.Frame.Y + activeview.Frame.Height + offset);
// Calculate how far we need to scroll
scroll_amount = (r.Height - (View.Frame.Size.Height - bottom)) ;
// Perform the scrolling
if (scroll_amount > 0) {
moveViewUp = true;
ScrollTheView (moveViewUp);
} else {
moveViewUp = false;
}
}
Клавиатура вниз - это просто. Если View был перемещен, просто измените его.
private void KeyBoardDownNotification(NSNotification notification)
{
if(moveViewUp){ScrollTheView(false);}
}
Прокрутка вида будет анимировать прокрутку.
private void ScrollTheView(bool move)
{
// scroll the view up or down
UIView.BeginAnimations (string.Empty, System.IntPtr.Zero);
UIView.SetAnimationDuration (0.3);
RectangleF frame = View.Frame;
if (move) {
frame.Y -= scrollamount;
} else {
frame.Y += scrollamount;
scrollamount = 0;
}
View.Frame = frame;
UIView.CommitAnimations();
}
вы можете использовать https://github.com/hackiftekhar/IQKeyboardManager
Xamarin КСН связывания https://github.com/TheEightBot/Xamarin.IQKeyboardManager
Xamarin NuGet: https://www.nuget.org/packages/Xamarin.IQKeyboardManager/
Удивительно - племя, рад, что они создали это – cfl
Привет, я использовал свое решение и столкнулся с проблемой. Мой расчетный scroll_amount всегда отрицательный ... Любая идея, что я делаю неправильно ... Thx – Christoph