在UIWebView || WKWebView 中你會意外的發現web頁面,input獲取焦點彈出系統虛擬鍵盤時,擋住input,開始以為是我使用了IQKeyboardManager該庫導致鍵盤帶有 toolBar 顯示,但是我已經在該類中禁止了該庫的使用,接下來又寫了個demo 發現了確實不是該庫引起的問題,最終發現其是UIWebView鍵盤的accessoryBar自帶的,蘋果官方并沒有給出方法,所以我們只能夠自己來解決。有些方案大家可以上 https://stackoverflow.com 上查找相對比較多答案及準確性更高。
場景圖示如下:
accessoryBar顯示標示圖
由于本人使用的是 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];