1. 軟鍵盤彈出的邏輯說明
(1) 邏輯說明:App平臺軟鍵盤彈出有 adjustResize|adjustPan 兩種模式,默認為 adjustPan 模式,小程序平臺只支持 adjustPan 模式,H5平臺因不同瀏覽器而異
- adjustResize:軟鍵盤彈出時,webview窗體高度擠壓(頁面變形)。屏幕高度=webview窗體高度+軟鍵盤高度
- adjustPan:軟鍵盤彈出時,webview窗體高度不變,但窗體上推,以保證輸入框不被軟鍵盤蓋住
(2) 配置方式,在 pages.json 中配置 style
"app-plus": {
"softinputMode": "adjustPan"
}
注意:adjustResize模式在Android App上,彈起鍵盤和收回鍵盤時,因為要重設webview窗體高度,可能會在個別安卓機型閃現灰屏或漏出下層頁面內容。
疑問:HbuilderX升級后,雖然softinputMode設為adjustPan,但輸入框聚焦軟鍵盤彈出時頁面仍被擠壓??赏ㄟ^給被壓縮的區域設置一個最小高度(即一個能讓所有元素按原來布局排列的高度)
來解決頁面變形問題,參考手機軟鍵盤彈起導致頁面變形的一種解決方案。
示例:設置中間被壓縮區域最小高度min-height: 300upx;
。
<template>
<view class="uni-flex uni-column" style="width: 100%;height: 100%;">
<view class="uni-flex uni-row justify-end align-center" style="width: 100%;height: 14%;">1.頂部區域</view>
<view class="uni-flex uni-row justify-center align-center" style="width: 100%;height: 72%;min-height: 300upx;">
<view class="flex-treble uni-flex justify-center align-center" style="height: 100%;">2.1中間左邊區域</view>
<view class="flex-five uni-flex uni-column justify-center align-center" style="height: 100%;">
<view class="flex-treble uni-flex uni-row justify-center align-center" style="width: 100%;">2.2主區域-(1)頂部</view>
<view class="flex-four uni-flex uni-column justify-center align-center" style="width: 100%;">
<view class="flex-sub uni-flex uni-column justify-start align-center padding-lr-15" style="width: 100%;">
<view class="uni-flex uni-row justify-start align-center" style="width: 100%;">
<image class="icon_user" src="../../static/icon_user.png"></image>
<input v-model="account" placeholder="輸入用戶名"></input>
</view>
<view class="shape_line"></view>
</view>
<view class="flex-sub uni-flex uni-column justify-start align-center padding-lr-15" style="width: 100%;">
<view class="uni-flex uni-row justify-start align-center" style="width: 100%;">
<image class="icon_password" src="../../static/icon_password.png"></image>
<input password v-model="password" placeholder="輸入密碼"></input>
</view>
<view class="shape_line"></view>
</view>
</view>
<view class="flex-twice uni-flex uni-row justify-center align-center padding-lr-15" style="width: 100%;">
<button class="flex-sub @tap="userLogin">登錄</button>
<view class="flex-sub">2.2主區域-(3)底部</view>
<button class="flex-sub">注冊帳號</button>
</view>
</view>
<view class="flex-sub uni-flex justify-center align-center" style="height: 100%;">2.3中間右邊區域</view>
</view>
<view style="width: 100%;height: 14%;">3.底部區域</view>
</view>
</template>
2. 軟鍵盤收起的邏輯說明
(1) 邏輯說明
- Android上在軟鍵盤彈出后,點擊back或點擊非置焦區域可收起軟鍵盤。
- iOS上如果軟鍵盤上方有帶有“完成”的橫條,則需要點完成才能收起鍵盤;如果沒有軟鍵盤上方橫條,則點擊非input/textarea區域即可收起軟鍵盤。
以上為默認邏輯,uni-app同時提供了隱藏軟鍵盤的api:uni.hideKeyboard()。
uni.hideKeyboard();//隱藏軟鍵盤
// plus.key.hideSoftKeybord();
注意:它只隱藏已經顯示的軟鍵盤,如果軟鍵盤沒有顯示則不做任何操作。在實際應用中,如外接掃碼槍時,不能通過該api來實現完全禁用軟鍵盤的效果。
focus:function(){
console.log("輸入框聚焦");
// 并不能完全禁用軟鍵盤
setTimeout(function(){
uni.hideKeyboard();//隱藏軟鍵盤
// plus.key.hideSoftKeybord();
},250);
},