点击底部input导致页面整体上顶问题解决方案(自定义导航栏情况)

195 阅读1分钟

这里会看见因为键盘高度撑起而导致页面整体上顶,非常影响美观。

index.pngindex.png


解决方案

一、微信小程序的input框带有“adjust-position”属性,将它设为false禁用。

index.png

index.png

二、input区域动态定位计算,解决Android部分设备键盘高度不准问题。推荐使用uni.onKeyboardHeightChange()通过监听软键盘高度去做动态计算,uni.onKeyboardHeightChange()方法是实时获取高度的,input区域也能做到实时定位。如果你用的是@focus或者@click的话都会遇到键盘完全打开后才进行定位的延迟问题。

// 监听键盘高度,做消息输入区域定位 
uni.onKeyboardHeightChange(res => { 
    let keyboardHeight = res.height; //软键盘高度 
    uni.getSystemInfo({ success: info => { 
        /* @screenHeight 手机屏幕尺寸高度 @windowHeight 屏幕可操作区域 部分android手机存在虚拟键位,虚拟键位占了软键盘高度,占了屏幕总高度,但不占屏幕可视区域高度。 如要精准计算键盘尺寸,首先需要计算出手机屏幕尺寸高度和屏幕可操作区域的差, 最终键盘高度减去两者的差才能拿到真正的键盘高度,动态计算键盘高度一定要用px单位。 */ 
        const { screenHeight, windowHeight } = info; 
        const heightDiff = screenHeight - windowHeight; 
        state.sessionPositionBottom = keyboardHeight ? (keyboardHeight - heightDiff) : store.tabbarHeight; 
        } 
    }); 
});

下图为Android部分设备键盘高度不准问题的示例图

index.png

三、键盘失去焦点将input区域bottom设为0,如果是自定义tabbar设为tabbar

// 消息列表输入框失去焦点,开始做消息窗口定位下移
const onBlur = () => state.sessionPositionBottom = store.tabbarHeight;