如何解决微信小程序input输入框弹出键盘时页面整体上移问题?

微信小程序 input 输入框的键盘把页面整体顶上去(导航栏顶到屏幕上方看不到了)

使用过 scroll-view、设置过导航栏fixed固定定位等等

<template>
  <view class="scan-container">
    <u-navbar title="我是UI组件库导航栏" title-color="#000" title-bold></u-navbar>

    <view> 很多行 </view>
    <view>... </view>
    <input
          type="number"
          inputmode="number"
          v-model="customMoney"
          placeholder="输入自定义金额:"
          @input="validateAmount"
          @focus="handleFocus"
          @blur="handleInputBlur"
          disable-scroll
          :adjust-position="true"
        />
 </view>
</template>
阅读 1.8k
6 个回答
import { View, Image, InputProps, CommonEventFunction, Textarea } from "@tarojs/components";
import sendIcon from '@/assets/images/send.png'
import sendGreyIcon from '@/assets/images/send-grey.png'

import './style.scss';
import { useEffect, useState } from "react";
export function QuestionInput({
    disabled,
    onSend
}: {
    disabled: boolean,
    onSend?: (value: string) => void
}) {
    const [marginBottom, setMarginBottom] = useState(0);
    const [value, setValue] = useState('')
    const [focus, setFocus] = useState(false)
    const [autoHeight, setAutoHeight] = useState(false)
    const handleFocus = (event) => {
        if (event.detail.height) {
            setFocus(() => {
                setTimeout(() => setMarginBottom(event.detail.height + 120), 100)
                return true;
            })
        } else {
            setFocus(() => {
                setTimeout(() => setMarginBottom(0), 100)
                return false;
            })
        }
    }
    const handleInput: CommonEventFunction<InputProps.inputEventDetail> = (event) => {
        setValue(() => event.detail.value)
    }

    const handleClickSendBtn = () => {
        value && onSend && onSend(value)
        setValue('')
    }

    useEffect(() => {
        setAutoHeight(true)
    }, [])

    return <>
        <View className="question-input">
            <Textarea
                placeholder="试试问一个新问题"
                onKeyboardHeightChange={handleFocus}
                onInput={handleInput}
                value={value}
                adjustPosition={false}
                showConfirmBar={false}
                focus={focus}
                autoHeight={autoHeight}
                disabled={disabled}
            />
            <Image
                src={value ? sendIcon : sendGreyIcon}
                onClick={handleClickSendBtn}
            />
        </View>
        <View style={{
            transition: 'all ease-in-out 0.1s',
            display: 'block',
            width: '100%',
            height: `${marginBottom}rpx`
        }}></View>
    </>
}

当小程序组价的参数不生效的时候试试这个吧

新手上路,请多包涵

1.首先,让我们看看你的代码结构。我注意到你使用了 u-navbar 组件,并且设置了 adjust-position="true"。这个属性实际上会触发页面的自动调整,我们需要修改这个设置。
2.主要的解决方案是:
设置 adjust-position="false" 来禁用自动调整
使用 fixed 定位来固定导航栏
使用 scroll-view 来确保内容可滚动

推荐问题