键盘回避对 UITexField 有效 - iOS 14 现在不适用

Keyboard avoidance worked for UITexField - Not now in iOS 14

在现有项目中有许多子classed UITextFieldsUITextViews 和其他基于文本的输入子classes 移动一个 UIScroll (self.view) 很好地查看以避免键盘输入。

由于 iOS 14 UITextField 不会向上移动 UIScrollView 以避免键盘输入,因此其他所有内容 UITextView 仍然可以正常工作 UITextField才不是。没有对代码或委托进行更改

   - (void)scrollToField:(id)field
{
  
    
        if (field != nil && [field isKindOfClass:[UIView class]]) {
           
            UIView *control = (UIView *)field;
            CGFloat y = control.frame.origin.y - 90.0f;
            [self.view setContentOffset:CGPointMake(0, (y < 0 ? 0 : y)) animated:YES];
    
        }
    }

问题似乎是 UIView *control = (UIView *)field;。我认为 UITextField 不再是 UIView 的 class 了?在此假设下,[UIView class] & UIView *control = (UIView *)field; 全部更改为 UITextField。视图仍然没有像以前那样向上移动。

   - (void)scrollToField:(id)field
{
  
    
        if (field != nil && [field isKindOfClass:[UITextField class]]) {
           
            UITextField *control = (UITextField *)field;
            CGFloat y = control.frame.origin.y - 90.0f;
            [self.view setContentOffset:CGPointMake(0, (y < 0 ? 0 : y)) animated:YES];
    
        }
    }

综上所述,问题是:

什么是 UITextField iOS 14 中的 class?

如何在 iOS 14

之前恢复 UITextField 移动滚动视图的功能

万一其他人有这个,-90.0f 的偏移量将 UITextfield 放置在导航栏略微下方以防止滚动。只需将其调整为 -100.0f 即可在 UITextField 和导航栏之间留出间隙,并允许像以前一样的滚动行为