首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WKWebView如何在显示键盘时禁用adjustedContentInset?

WKWebView 在显示键盘时,默认会自动调整内容插入(adjustedContentInset),以确保网页内容不会被键盘遮挡。如果你希望在键盘显示时禁用这种自动调整,可以通过以下步骤实现:

基础概念

  • WKWebView: 是苹果提供的用于在iOS应用中嵌入网页内容的控件。
  • adjustedContentInset: 这是一个属性,用于表示视图的内容插入,它会根据键盘或其他UI元素的出现自动调整。

解决方案

要禁用WKWebView在键盘显示时的自动调整内容插入,可以通过监听键盘事件并手动设置WKWebView的contentInsetscrollIndicatorInsets属性来实现。

步骤:

  1. 注册键盘事件监听器:使用NotificationCenter来监听键盘的显示和隐藏事件。
  2. 调整WKWebView的Insets:在键盘显示时,将WKWebView的contentInsetscrollIndicatorInsets设置为不考虑键盘的高度。

示例代码:

代码语言:txt
复制
import UIKit
import WebKit

class ViewController: UIViewController {
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 初始化WKWebView
        webView = WKWebView(frame: self.view.frame)
        self.view.addSubview(webView)
        
        // 加载网页
        let url = URL(string: "https://example.com")!
        let request = URLRequest(url: url)
        webView.load(request)
        
        // 注册键盘事件监听
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
    }

    @objc func keyboardWillShow(_ notification: Notification) {
        // 获取键盘高度
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            // 设置WKWebView的contentInset和scrollIndicatorInsets,忽略键盘高度
            webView.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
            webView.scrollView.scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        }
    }

    @objc func keyboardWillHide(_ notification: Notification) {
        // 恢复默认的contentInset和scrollIndicatorInsets
        webView.scrollView.contentInset = UIEdgeInsets.zero
        webView.scrollView.scrollIndicatorInsets = UIEdgeInsets.zero
    }

    deinit {
        // 移除监听器
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
    }
}

优势与应用场景

  • 优势:允许开发者更精确地控制页面布局,特别是在需要自定义键盘交互的场景中。
  • 应用场景:适用于需要固定页面布局,不希望键盘弹出时自动调整内容的网页或应用。

通过上述方法,你可以有效地控制WKWebView在键盘显示时的行为,从而提供更符合设计预期的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS WKWebView+UITableView混排

WKWebView+UITableView混排 做内容展示页的时候,经常会用到WKWebView+UITableView的混排功能,现在此做一个总结,该功能的实现我采用了四种方法。...方案1: webView作为tableView的Header, 撑开webView,显示渲染全部内容,当内容过多时,比如大量高清图片时,容易造成内存暴涨(不建议使用),此方案简单粗暴 , 仅适用于内容少的场景...禁用tableView和webView.scrollVie的scrollEnabled = NO,通过添加pan手势,手动调整 contentOffset。...的使用、WKWebView+UITableView混排、UIScrollView实现原理、WKWebView离线缓存功能 等更多内容都在 https://github.com/wsl2ls/iOS_Tips...AVFoundation 实时滤镜 6、GPUImage框架的使用 7、VideoToolBox和AudioToolBox音视频编解码 8、OpenGL ES学习 9、LeetCode算法练习 10、键盘和

1.7K30
  • iOS 12.0 WebView键盘弹出,关闭后界面没有回收的问题

    所以导致再次点击输入框时,没有反应 修改 最开始,修改方法时,添加iOS 12.0之后,设置 contentInsetAdjustmentBehavior 为 UIScrollViewContentInsetAdjustmentAutomatic...,设置了之后,键盘的问题解决了,但是又出现新的问题,iPhone X系列的全面屏的适配,之前H5页面body写的height:100%的地方,会显示高度不对。...self.web.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic; } 于是笔者再次尝试修改: 参考iOS12 WKWebView...出现input 键盘页面上顶不下移解决方法,在H5界面监听键盘弹出和收起,在收起时,对webview的scrollview做偏移处理,设置后,发现对笔者的项目来说仍旧不生效,笔者的项目同一个网页上有多个可输入的地方...scrollHeight - 1, 0));}, 300);"; [self.web evaluateJavaScript:jsStr completionHandler:nil]; } 参考 iOS12 WKWebView

    2.6K20

    小程序iOS客户端框架——控件事件逻辑框架与控件原生化(下)

    微信客户端为小程序的运行提供了框架支持,如service运行环境、页面缓存机制以及控件原生化支持等,本文将对这些部分实现原理做一一介绍。 6....QQ地图组件的封装将QQ地图的丰富功能引入到小程序,让开发者具有更广阔的开发想象空间;输入控件分别引入了iOS原生的UITexField和UITextView,提供了HTML输入框无法满足的定制化输入键盘等功能...原生控件插入到WKWebView后将覆盖控件树中的HTML节点) 如上图,插入的原生控件必然总是盖住网页(节点树中越靠下的节点,显示层级越高),这样就会导致: 1 如果开发者期望在原生控件上覆盖一些自定义...为了解决这一问题,客户端尝试对WKWebView解析HTML元素的原理进行分析,WKWebView在进行HTML解析时,会根据页面DOM元素在WKWebView控件下生成对应的iOS原生控件,通过分析,...WKWebView解析HTML在客户端生成对应的原生控件示例) 如上图所示,WKWebView将在解析HTML时将该标签位置生成一个对应的UIScrollView控件。

    2.9K40

    WKWebView详解

    一个WKWebView对象显示交互式的web内容,比如在应用程序内的浏览器。...包括cookies,磁盘文件,内存缓存以及持久化数据如WebSQL,IndexedDB数据库,local storage。...WebView用户界面通过实现这个协议来控制新窗口的打开,增强用户单击元素时显示的默认菜单项的表现,并执行其他用户界面相关的任务。这些方法可以通过处理JavaScript或其他插件内容来调用。...警告应该只有一个确定按钮 显示一个JavScript 确认界面 - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage...返回nil则使用默认的预览表现 如果返回一个视图控制器则预览会显示这个视图控制器,并且在用户触发pop操作(继续按压)时触发webView:commitPreviewingViewController:

    20.7K193

    肘子的 Swift 周报 #043| 记忆归档和唤醒

    也许是时候重拾一些旧传统了,适时将部分数字记忆转化为实体形式(如纸质照片、手写文字等)。这不仅增加了一种备份方式,相较于纯数字化的体验,实体所带来的质感也更易唤起深藏的记忆。...前一期内容|全部周报列表 原创 如何在 SwiftUI 中平铺图片[3] Fatbobman( 东坡肘子 )[4] “这题我会!”。我想,看到本文标题时,这恐怕是大多数人的第一反应。...并针对开发者讲解了如何在自定义文本视图中集成 Writing Tools,如何控制 Writing Tools 的行为,以及如何处理特定文本范围(如代码块)等内容。...iOS WKWebView 页面与档案资源 Preload 预载 / Cache 缓存研究[9] ZhgChgLi[10] 在本文中,ZhgChgLi 探讨了 iOS 开发中使用 WKWebView 时的页面预加载和缓存策略...似乎并没有感觉到比 Swift 3 或者 4 时更快乐。

    9410

    在 Windows 11 上关闭弹出窗口最正确方法

    方法一:禁用所有应用通知 默认情况下,本机应用程序以及安装在您计算机上的应用程序具有推送通知的完全权限,并且每次有事件需要通知时都会惹恼您。...这种新的请勿打扰允许您自定义如何在您的 PC 上抑制通知。...计算机制造商如戴尔或惠普可以通过其应用程序访问通知,以用于展示广告和其他可能不需要的弹出窗口。然而,这种烦恼有一个快速解决方法: 按Windows + i打开设置应用程序。...以下是禁用它们的方法: 打开文件资源管理器。 然后单击顶部工具栏中的省略号按钮。 选择“选项”。 单击并切换到“查看”选项卡。 现在,在“高级设置”下向下滚动并取消选中“显示同步提供商通知”。...按下Windows + R键盘,输入以下内容,然后按下Enter键盘。 gpedit.msc 现在使用左侧边栏导航到以下路径。

    1.2K10

    Human Interface Guidelines — Custom Keyboards

    请注意,当您有多个键盘时,Globe键将替换表情符号键。...通过在您的app中,而不是在键盘本身中提供使用说明,能让学习过程更轻松。告诉人们如何使用键盘,如何在文本输入过程中将其触发,如何使用它,和如何切换回标准键盘。...·在打字过程中播放标准键盘咔嗒声  当用户敲击键盘上的按键时,键盘咔嗒声提供听觉反馈。 在您的输入视图中点击自定义控件也应该产生这种声音。...请注意,此声音仅适用于可见的自定义输入视图,人们可以在“设置”>“声音”中全面禁用声音。 ...·必要时提供 input accessory view  某些app采用了键盘上方显示的其他自定义input accessory view。

    99630

    iOS小技能:WKWebView与JS的交互

    框架中的负责网页的渲染与展示的类,相比UIWebView速度更快,占用内存更少,支持更多的HTML特性 I JS调用iOS 使用例子:点击页面图片,调用iOS方法进行图片放大显示 1.1 JS代码: window.webkit.messageHandlers.openImage.postMessage...收到ScriptMessage时的回调协议 - (void)userContentController:(WKUserContentController *)userContentController...iOS调用JS数据显示框 </...防抓包 防抓包 使Thor,Charles,Burp等代理抓包方式全部失效 configuration.connectionProxyDictionary = @{}; 但是无法避免如Wireshark.../details/77963082 大图浏览器 ImageZoomScale:iOS 利用UIScrollView实现 图片放大预览,并支持缩小 iOS查看大图浏览器(应用场景:查看风险商户证明材料时图片支持滑动切换

    7.3K30

    iOS新闻类App内容页技术探索

    据相关数据显示,截至2017年底,中国手机新闻客户端用户规模达到6.36亿人,移动App已经成为新闻和内容传播的最重要途径之一。...如何在页面中合理的处理WebView与扩展区中的多种View协同滚动,灵活扩展,并且支持下拉刷新、上拉加载等操作,不同的新闻类App也有不同的技术方案。 1....主流滚动复用框架 继承特殊ScrollView: 目前流行的框架如alibab的 LazyScrollView ,对于实现复用回收机制,都需要继承相应的ScrollView,这种方式对于WKWebView...View滚动状态简单: 滚动时位置的计算,最简单的方式就是根据屏幕的高度计算是否进入屏幕,对于预加载的需求,绝大部分开源框架也是只是在屏幕区域的上下增加了Buffer,仍然不能区分具体的状态,如进入buffer...进入内容页时直接从Cache中取出内容模板,直接交给WebView渲染。

    2.9K00

    iOS 16:让 iPhone 电池更持久的 15 个技巧

    文章目录[隐藏] 1.关闭现场活动 2.删除锁屏小部件 3.禁用触觉键盘反馈 4.关闭常亮显示(iPhone 14 Pro) 5. 不要使用 iCloud 共享照片库 6.选择非动画壁纸 7....无论是什么原因,我们都收集了一些建议,说明如何在最后一点都很重要的情况下从iPhone中获得更多电池。...请注意,没有很多建议不会禁用 iPhone 上的关键功能,因此您必须平衡电池消耗与您想要启用的功能集,在需要更长的电池寿命时根据需要关闭和打开。...3.禁用触觉键盘反馈 Apple 在 iOS 16 中还添加了一项有趣的功能,当你使用屏幕键盘时,它会为你提供触觉反馈。...显示器使用 1Hz 刷新率来节省电池电量,Apple有一些巧妙的技巧,比如当连接的 Apple Watch 不在附近时(表示 iPhone 用户不在房间内)或 iPhone 放在口袋里时关闭显示器,但常亮显示仍然比没有常亮显示更快地耗尽电池电量

    3.5K20

    同层渲染

    原生组件:iOS、Android 等客户端 Native 组件,如 iOS 中的 UITextField、UITextView,Android 中的 EditText、ListView 等; H5 组件...:是指 HTML5 语言编写的 web 组件,如、 等; 相比于 H5 组件,原生组件不仅可以提供 H5 组件无法实现的一些功能,还能提升用户体验上的流畅度...我们上文已经提到原生组件比 H5 组件性能更好,所以说对于一些 H5 组件,我们希望其在客户端渲染时被映射成原生组件,那么问题来了:作为客户端来讲,我们一般会采用 WebView 加载 HTML,原生组件脱离在...其本质就是原生组件可以和 H5 组件可以在同一个层级上显示,使原生组件与 H5 组件可以随意叠加,去除层级限制。像使用 H5 组件一样去使用原生组件,设置组件的样式等等。...H5 组件,在客户端有 SDK 支持下显示成原生组件,做到无缝切换; ...

    1.6K21

    python监听usb鼠标插入

    在刚把电脑系统转为linux之后,一直觉得需要通过命令:sudo rmmod psmouse来完成禁用触摸板的操作实在是太不方便了,于是就想着用一个python脚本来完成该操作。...到目前为止还没有完成这个小脚本,个人觉得系统应该是有一个usb设备插入的事件通知的,只是目前还不清楚怎么调用,另外还有一个问题是如何在python脚本中以管理员的身份执行禁用和启用触摸板的命令。...2-communication device:通讯设备,如电话,moden等等。3-HID:人机交互设备,如键盘,鼠标等。...6-image图象设备,如扫描仪,摄像头等,有时数码相 机也可归到这一类。7-打印机类。如单向,双向打印机等。8-mass storage海量存储类。所有带有一定存储功能的都可以归到这一类。...如接口转接卡等。

    3.4K20

    测试匠谈 | 微信H5兼容性测试理论和实践经验

    iOS的设备情况:根据维基百科显示,截至2024年9月,苹果公司已推出46款iPhone型号。...测试方法与实践做在测试之前首先,不指望测试阶段解决所有的问题,在开发时就需要考虑兼容性。...移动端兼容性测试常用方法① 屏幕尺寸兼容性测试使用浏览器的开发者工具或专门的响应式测试工具(如Responsive Design Mode)来模拟不同设备的屏幕尺寸和方向,确保网页在不同设备上呈现良好(...因此,同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。...我们在touchstart时让video进行静音循环播放,touchend时将音频的播放时间设置到0并取消静音循环,达到了松手播放的效果,但是这种“另类”的操作可能就无法保证兼容性了。

    11510
    领券