iOSキーボードが入力ボックスをブロックする解決方法


本論文では、iOSキーボードのイジェクトブロックの解決方法を共有します。参考にしてください。具体的な内容は以下の通りです。
問題:入力ボックスはキーボードでブロックされています。
期待効果:入力ボックスはキーボードの上にあります。

解決策:
キーボードの出現と消失の状態をモニターして、キーボードが現れたら、現在のビューを上に移動し、入力が完了したらキーボードを閉じると、ビューは初期状態に戻ります。
難点:ビューを上に移動する距離

原理は同じです。oc版の参考コード:

self.phoneInput = [UITextField new];
  self.phoneInput.placeholder = @"   ...";
  [self.view addSubview:self.phoneInput];


///           
- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  
  [[NSNotificationCenter defaultCenter] addObserver:self
                       selector:@selector(keyboardWillShow:)
                         name:UIKeyboardWillShowNotification
                        object:nil];
  [[NSNotificationCenter defaultCenter] addObserver:self
                       selector:@selector(keyboardWillHide:)
                         name:UIKeyboardWillHideNotification
                        object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification
{
 //        view
 NSArray *textFields = @[self.phoneInput];
 UIView *focusView = nil;
 for (UITextField *view in textFields) {
  if ([view isFirstResponder]) {
   focusView = view;
   break;
  }
 }
 if (focusView) {
   //         
   double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
   //      Y  
   CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
   //          window Y  
   CGRect rect = [focusView convertRect:focusView.bounds toView:[[[UIApplication sharedApplication] delegate] window]];
   CGPoint tmp = rect.origin;
   CGFloat inputBoxY = tmp.y + focusView.frame.size.height;
   //      
   CGFloat ty = keyboardY- inputBoxY;
   NSLog(@"position keyboard: %f, inputbox: %f, ty: %f", keyboardY, inputBoxY, ty);
   //    0,     
   [UIView animateWithDuration:duration animations:^{
    if (ty < 0) {
     self.view.transform = CGAffineTransformMakeTranslation(0, ty);
    }
   }];
  }
}

- (void)keyboardWillHide:(NSNotification *)notification
{
 //         
 double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
 //  
 [UIView animateWithDuration:duration animations:^{
   self.view.transform = CGAffineTransformMakeTranslation(0, 0);
 }];
}
///<UITextFieldDelegate>
///UITextFieldDelegate    ,      
-(void)textFieldDidEndEditing:(UITextField *)textField
{
   self.view.frame =CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width,[[UIScreen mainScreen] bounds].size.height);
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。