1

У меня есть UITextField. Мягкая клавиатура закрывает UITextField, когда я нажимаю.
Как перемещать макет, поэтому я хочу, чтобы он показывался над клавиатурой.
Спасибо заранее.Как переместить макет, когда клавиатура программного обеспечения отображается в Xamarin.iOS

ответ

0

увидеть образец 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(); 
} 
+0

Привет, я использовал свое решение и столкнулся с проблемой. Мой расчетный scroll_amount всегда отрицательный ... Любая идея, что я делаю неправильно ... Thx – Christoph