当前位置: 首页 > news >正文

移动端 (RN) - 键盘弹出, 不遮挡输入框 (和 底部按钮)的处理方案

内容较少,通过挤压实现

需求:
我现在有个界面是这样的:

顶部是标题行:请输入您的昵称 
中间是输入框。 
最底部是个提交按钮。 📱 运行效果:键盘弹出时,输入框和按钮自动上移;
键盘收起后恢复原位;
iOS / Android 都兼容。
import React from 'react'
import { Keyboard, KeyboardAvoidingView, Platform, SafeAreaView, TouchableWithoutFeedback, View } from 'react-native'
import Button from './components/Btn'export default function FunctionComponent() {return (<SafeAreaView className='relative h-full' style={{ paddingTop: top }}>{/* 顶部导航栏组件  固定不动 不随键盘弹出而移动 */}<RegisterProgressNavbar  />{/* 使用KeyboardAvoidingView来处理:键盘弹出时,挤压布局,适合简单布局,但是不支持Scroll滚动。 */}<KeyboardAvoidingViewclassName='flex-1'behavior={Platform.OS === 'ios' ? 'padding' : 'height'} // iOS和Android不同策略>{/* 点击空白处收起键盘 */}<TouchableWithoutFeedback onPress={Keyboard.dismiss}>//这里使用 justify-between 让底部按钮位于最底部<View className='flex-1 justify-between pt-8'>{/* 主体内容 */}<View className='items-center'>主体内容</View>{/* 底部按钮  随键盘弹出而移动 保持在键盘上方 不会被键盘遮挡*/}<View className='w-full px-4'><Button onPress={() => {}} text='下一步' /></View></View></TouchableWithoutFeedback></KeyboardAvoidingView></SafeAreaView>)
}
  • 底部按钮不能用 绝对定义,都则不生效
  • KeyboardAvoidingView 是靠挤压布局调整容器高度)来避开键盘。适用于 内容不够高,布局简单的场景

情况2:内容较多,通过滚动实现

KeyboardAwareScrollView 自动调整 ScrollView 偏移,确保当前输入框不被键盘遮挡。其实和底部按钮没啥关系。但是,我们可以通过设置bottomOffset,来控制 滚动距离,让底部按钮也不被遮挡。

import Button from '@/components/Btn'
import { SafeAreaView, View } from 'react-native'
import { KeyboardAwareScrollView } from 'react-native-keyboard-controller'export default function Source() {return (<SafeAreaView className='relative h-full' style={{ paddingTop: top }}>{/* 顶部导航栏组件  固定不动 不随键盘弹出而移动 */}<RegisterProgressNavbar />{/* 使用KeyboardAwareScrollView来处理:键盘弹出时,发生滚动 适合复杂布局,支持Scroll滚动。 */}<KeyboardAwareScrollViewbottomOffset={125} //单位px,键盘距离当前输入框底部的距离//这里使用  contentContainerStyle + flexGrow: 1 + justify-between 让底部按钮位于最底部contentContainerStyle={{ flexGrow: 1, justifyContent: 'space-between' }} //控制内容布局 。内容不够撑满屏幕一定要用:flexGrow。// style={{ 此处使用 flex:1 height:100% 不生效! }} //控制 ScrollView 外层容器keyboardShouldPersistTaps='handled' //只有当触摸事件被正确处理时才保持键盘打开><View className='flex-1 justify-between pt-8'><View className='items-center'>主体内容</View>{/* 底部按钮  随键盘弹出而移动 保持在键盘上方 不会被键盘遮挡*/}<View className='w-full px-4'><Button text='提交' /></View></View></KeyboardAwareScrollView></SafeAreaView>)
}
2.1 keyboardShouldPersistTaps

keyboardShouldPersistTaps 是 React Native 中 ScrollView 和相关组件的一个重要属性,用于控制键盘在触摸事件发生时的行为。让我详细解释一下它的取值和含义:
取值和含义

  1. “never” (默认值)
    含义:键盘永远不会保持打开状态
    行为:任何触摸都会关闭键盘
    问题:这会导致按钮点击时键盘先关闭,按钮的 onPress 事件可能不会触发
  2. “always”
    含义:键盘总是保持打开状态
    行为:触摸任何地方都不会关闭键盘
    问题:用户无法通过点击空白区域关闭键盘,体验不佳
  3. “handled”

含义:只有当触摸事件被正确处理时才保持键盘打开
行为:

  • 如果触摸的是可交互元素(如按钮、输入框),键盘保持打开
  • 如果触摸的是空白区域,键盘关闭
    优势:这是最理想的设置,既允许按钮正常工作,又允许用户关闭键盘
http://www.dtcms.com/a/515145.html

相关文章:

  • 【C++闯关笔记】深究继承
  • Python爬虫抓取豆瓣TOP250数据
  • AWS Elemental MediaConvert:视频转码不再难
  • 华为OD最新机试真题-乘坐保密电梯-OD统一考试(C卷)
  • SpringBoot 如何实现零拷贝:深度解析零拷贝技术
  • 问卷调查网站怎么做做百度推广
  • Jenkins 持续集成与部署指南
  • 新书速览|DeepSeek高效数据分析:从数据清洗到行业案例
  • 搜索百科(5):Easysearch — 自主可控的国产分布式搜索引擎
  • 自己建商城型网站做设计的软件
  • # 模型量化(二):基于BERT的量化代码实战
  • 网站没有备案会怎样资源网官网
  • 【C++:继承】面向对象编程精要:C++继承机制深度解析与最佳实践
  • Python访问者模式实战指南:从基础到高级应用
  • 《数组和函数的实践游戏---扫雷游戏(基础版附源码)》
  • 专门做网站的软件是网站着陆页怎么做
  • 南京专业网站制作公司如何申请免费网站空间
  • 【乌班图】远程连接(向日葵/ToDesk)显示成功却无桌面的问题解析与解决
  • 异或的应用
  • c++语法——字符串(10.23讲课)
  • AI大事记13:GPT 与 BERT 的范式之争(上)
  • wordpress安装后查看站点失败网站创建多少年了
  • 文件指针控制函数
  • 【JavaEE初阶】 多线程编程核心:解锁线程创建、方法与状态的创新实践密码
  • JavaEE初阶——HTTP/HTTPS 核心原理:从协议格式到加密传输
  • Linux 内存 get_user_pages_remote 函数
  • 【图像处理】图像滤波
  • CSS 列表详解
  • 建设工程规范下载网站商城网站开发的完整流程
  • 同德县网站建设公司海南网站建设及维护