JSBridge调用原生方法后页面样式错乱怎么办?
我在用JSBridge调用原生分享功能后,页面的布局突然乱了,特别是底部按钮位置不对。明明调用前样式是正常的,调完就出问题,是不是原生那边改了什么?
我试过在回调里重新设置样式,但没用。这是我的关键CSS:
.action-bar {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 50px;
background: #fff;
border-top: 1px solid #eee;
}
有没有人遇到过类似情况?是不是WebView的软键盘或者状态栏高度被原生操作影响了?
最常见的情况是,iOS的WKWebView在执行某些原生交互后,会把页面的视口高度"锁"在当时的状态,软键盘弹出或者系统UI变化都会影响这个状态。你的
.action-bar用的是position: fixed,这时候就会相对于一个"错误"的视口定位。给你一个比较优雅的解决方案,在JSBridge回调之后强制触发一次视口重算:
另外你的CSS可以优化成这样,加个安全区域适配:
把
height: 100%换成left: 0; right: 0;更稳妥,避免某些情况下宽度计算异常。用env(safe-area-inset-bottom)处理iPhone底部的安全区域,这样即使原生操作影响了状态栏,底部按钮也不会被遮挡。如果上面方案还不行,试试在页面初始化时加个viewport meta标签的设置,确保
viewport-fit=cover存在,这能避免WebView在某些交互后重新计算视口时出现偏差。