在UIWebView || WKWebView 中你会意外的发现web页面,input获取焦点弹出系统虚拟键盘时,挡住input,开始以为是我使用了IQKeyboardManager该库导致键盘带有 toolBar 显示,但是我已经在该类中禁止了该库的使用,接下来又写了个demo 发现了确实不是该库引起的问题,最终发现其是UIWebView键盘的accessoryBar自带的,苹果官方并没有给出方法,所以我们只能够自己来解决。有些方案大家可以上 https://stackoverflow.com 上查找相对比较多答案及准确性更高。
场景图示如下:
由于本人使用的是 WKWebView 下面就把相关的代码提供给大家参靠
建立一个 Nsobject 类
.h 文件
#import <Foundation/Foundation.h>
#import <WebKit/WebKit.h>
@interface NoInputAccessoryView : NSObject
- (void)removeInputAccessoryViewFromWKWebView:(WKWebView *)webView;
@end
.m 文件
#import "NoInputAccessoryView.h"
#import "BasewebViewController.h"
@implementation NoInputAccessoryView
- (id)inputAccessoryView {
return nil;
}
- (void)removeInputAccessoryViewFromWKWebView:(WKWebView *)webView {
UIView *targetView;
for (UIView *view in webView.scrollView.subviews) {
if([[view.class description] hasPrefix:@"WKContent"]) {
targetView = view;
}
}
if (!targetView) {
return;
}
NSString *noInputAccessoryViewClassName = [NSString stringWithFormat:@"%@_NoInputAccessoryView", targetView.class.superclass];
Class newClass = NSClassFromString(noInputAccessoryViewClassName);
if(newClass == nil) {
newClass = objc_allocateClassPair(targetView.class, [noInputAccessoryViewClassName cStringUsingEncoding:NSASCIIStringEncoding], 0);
if(!newClass) {
return;
}
Method method = class_getInstanceMethod([BasewebViewController class], @selector(inputAccessoryView));
class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));
objc_registerClassPair(newClass);
}
object_setClass(targetView, newClass);
}
@end
类中调用方式:
NoInputAccessoryView *noInputAccessoryView = [NoInputAccessoryView new];
[noInputAccessoryView removeInputAccessoryViewFromWKWebView:_WebView];