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

ReactNative进阶(三十六):iPad横屏适配

文章目录

    • 一、前言
    • 二、实现思路
    • 三、延伸阅读
    • 四、拓展阅读

一、前言

应用RN技术栈实现APP上线后,业务部门领导会上反馈未实现ipad横屏全屏展示,用户体验较差。由此,一场pad横屏全屏展示的APP调优工作由此开展。

二、实现思路

时间紧任务重,技术实现上,考虑到存量功能代码改造工作量,RN层面对于横屏改造工作量较大,故RN层面整体实现横屏展示时间上不允许,RN侧改造方案放弃。

由于业务方只关注APP某一功能模块,故将改造范围缩减,当业务方点击APP功能模块入口时,允许APP解除屏幕方向锁定,让屏幕方向根据设备的物理方向自动调整。当应用退出当前关注功能模块时,APP屏幕方向锁定,不允许屏幕方向根据设备的物理方向自动调整。

实现代码如下:
安装步骤:

npm i --save react-native-orientation
react-native link react-native-orientation (自动link不成功,建议手动link)

进入功能模块时,

import Orientation from 'react-native-orientation';onPress={() => {// 解除屏幕方向锁定,让屏幕方向根据设备的物理方向自动调整console.log('----------解除屏幕方向锁定,让屏幕方向根据设备的物理方向自动调整---------');Orientation.unlockAllOrientations();....
}}

退出功能模块时,

import Orientation from 'react-native-orientation';initData = () => {// 锁定屏幕竖屏锁定console.log('----------锁定屏幕竖屏锁定---------');Orientation.lockToPortrait();
};

按照以上实现思路实施后,发现android系统下的pad表现较好,能够按照预期设想自动实现APP横竖屏切换,且内容适配。

但是,iOS系统下的iPad表现不尽如人意,虽然可以实现屏幕横竖屏自动切换,但是当APP处于横屏状态下时,页面展示效果存在未完全铺展开的适配问题。

按照网上给出的解决方案:

对于iOS,在ios/Info.plist文件中包括以下行就可以了:

<key>UISupportedInterfaceOrientations</key>
<array><string>UIInterfaceOrientationPortrait</string>
</array><key>UISupportedInterfaceOrientations~ipad</key>
<array><string>UIInterfaceOrientationLandscapeRight</string><string>UIInterfaceOrientationLandscapeLeft</string><string>UIInterfaceOrientationPortrait</string><string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>

经实践发现问题依旧存在。

三、延伸阅读

react-native-orientation 组件可用函数如下:

  • lockToPortrait()
  • lockToLandscape()
  • lockToLandscapeLeft()
  • lockToLandscapeRight()
  • unlockAllOrientations()
  • getOrientation(function(err, orientation) 返回的结果有 LANDSCAPEPORTRAITUNKNOWNPORTRAITUPSIDEDOWN
  • getSpecificOrientation(function(err, specificOrientation) 返回的结果有 LANDSCAPE-LEFTLANDSCAPE-RIGHTPORTRAITUNKNOWNPORTRAITUPSIDEDOWN

官方文档中,还有一些事件的介绍,详细可以到官方文档上了解学习。

四、拓展阅读

  • 《react-native-orientation 官方文档》
http://www.lryc.cn/news/287470.html

相关文章:

  • jsx中使用插槽
  • CentOS服务器拒绝SSH登录
  • React16源码: React中的completeUnitOfWork的源码实现
  • uniapp移动端——企业微信H5调用jssdk实现扫一扫,通过weixin-java-cp获取ticket签名,配置config
  • 【前端基础--1】
  • E2 Mysql的基本操作和用户权限
  • TCP 的三次握手和四次挥手
  • mybatisplus做SQL拦截添加自定义排序
  • 代码随想录算法训练营第29天(回溯算法05 | * 491.递增子序列 * 46.全排列 * 47.全排列 II
  • mac docker desktop被禁用了,如何使用虚拟机lima运行docker
  • sublime text 开启vim模式
  • JS词法结构
  • 程序媛的mac修炼手册-- 如何用Python节省WPS会员费
  • ASP.NET Core NE8实现HTTP Upgrade和HTTP CONNECT代理服务器
  • apipost和curl收不到服务器响应的HTTP/1.1 404 Not Found
  • javascript:计算一个坐标数组的最小值点、最大值点、中心点
  • 使用远程工具连接Linux系统——使用Root用户登录
  • JuiceSSH结合内网穿透实现移动端设备公网远程访问Linux虚拟机
  • 06-枚举和模式匹配
  • 【C/C++】C/C++编程——C++ 开发环境搭建
  • Go 接口
  • 用 AI 将自拍照 P 进不同艺术作品,谷歌发布「艺术自拍 2」
  • SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心
  • c# 策略模式
  • 消息队列RabbitMQ.03.死信交换机的讲解与使用
  • 人工智能原理实验4(2)——贝叶斯、决策求解汽车评估数据集
  • 算力网络:未来计算资源的驱动力
  • java动态导入excel按照表头生成数据库表
  • Java 集合List相关面试题
  • k8s-基础知识(Pod,Deployment,ReplicaSet)