uniapp如何适配刘海屏

1. 什么是刘海屏?

刘海屏是指在手机屏幕上设计出一块凸起的部分,以容纳前置摄像头、听筒及其他传感器,目的是为了在不增加手机体积的前提下,实现全面屏的设计方案。刘海屏设计早在2017年iPhone X发布时就开始流行,并且成为了当前手机市场的趋势。而在手机开发中,如何适配刘海屏成为了开发者所关注的问题之一。本文主要介绍如何利用uniapp来适配刘海屏,使应用在不同的刘海机型上可以兼容显示。

2. uniapp适配刘海屏的方式

在uniapp中,通过设置 viewport-fit 属性来适配刘海屏。viewport-fit属性是针对手机浏览器在设置meta视口属性时不同填写值而定义的差异化CSS渲染属性,具体值如下:

auto: 浏览器默认属性

cover: 在视口范围内根据宽度或高度比例自动缩放内容

contain: 在视口范围内保证内容不失真自适应缩放显示

当应用在刘海屏设备上运行时,可以通过如下方式设置viewport-fit属性:

/* 设置 viewport-fit */

html{

font-size: 30px;

viewport-fit:cover;

}

在这个例子中,我们将viewport-fit属性设置为cover,以保证应用内容可以自适应屏幕。如此,无论是在刘海屏机型,还是在普通设备上运行,应用都可以按照屏幕大小自适应缩放显示,减少屏幕适配方面的工作量。

3. uniapp适配步骤

3.1 修改manifest.json配置文件

首先,在项目根目录的manifest.json文件中,需要添加“navigation_style“配置,属性值设置为“custom”。此属性用来设置带有刘海的机型的页面顶部导航栏样式。配置完成后manifest.json文件内容大致如下:

{

"app": {

"name": "myapp",

"versionName": "1.0.0",

"versionCode": "1"

},

"pages": [

{

"path": "pages/index/index",

"style": {

"navigationBarTitleText": "首页"

}

}

],

"window": {

"navigationBarBackgroundColor": "#ffffff",

"navigationBarTextStyle": "black",

"navigationBarTitleText": "uni-app",

"backgroundColor": "#f5f5f5",

"backgroundTextStyle": "light",

"enablePullDownRefresh": false,

"navigationStyle":"custom" // 带有刘海的机型顶部导航栏样式设置

},

"tabBar":{

"backgroundColor":"#fff",

"color":"#7A7E83",

"selectedColor":"#007aff",

"list": []

}

}

3.2 设置顶部导航栏样式

在uniapp中,可以通过设置titleNView属性来设置页面顶部导航栏样式。titleNView属性包括标题栏的颜色、标题、图标、按钮等等,具体用法如下:

{

"navigationBarTitleText": "uni-app", // 设置标题

"navigationBarBackgroundColor": "#FFFFFF", // 设置标题栏背景色

"navigationBarTextStyle": "black", // 设置标题栏文字样式

}

在设置完导航栏的样式后,还需要在App.vue文件中,添加一段代码来设置页面的首次渲染,即设置页面的onLoad函数:

onLoad() {

uni.getSystemInfo({

success: function (res) {

if (res.statusBarHeight !== undefined) {

const custom = wx.getMenuButtonBoundingClientRect();

uni.setStorageSync('statusBar', res.statusBarHeight);

uni.setStorageSync('custom', custom.bottom + custom.top - res.statusBarHeight);

}

}

});

3.3 利用SafeArea组件进行UI布局

SafeArea组件是苹果iOS11引入的特性。在刘海屏设备上,这个组件会自动调整布局,以适应不同屏幕设备。当然,在应用中,需要添加适当的CSS样式以保证应用的整体布局美观、合理。下面是一个SafeArea组件的使用例子:

<template>

<View class="content">

<View class="header">标题内容</View>

<safe-area class="list" padding=true>

<View v-for="(item, index) in items" :key="index" class="item">{{ item }}</View>

</safe-area>

</View>

</template>

<style>

.content {

display: flex;

flex-direction: column;

background-color: #fff;

padding-top: 15px;

}

.header {

font-size: 20px;

color: #000;

text-align: center;

padding: 10px 0;

}

.list .item {

font-size: 16px;

color: #999;

padding: 10px;

}

</style>

<script>

export default {

data() {

return {

items: ['item1', 'item2', 'item3', 'item4', 'item5']

}

}

}

</script>

在这个例子中,通过使用safe-area标签,设置页面顶部和底部保留安全区域的距离,以适应屏幕的尺寸。同时,添加了一些CSS样式来美化页面,提高应用的用户体验。

4. 总结

在本文中,我们简单地介绍了如何利用uniapp来适配刘海屏。通过设置viewport-fit属性、顶部导航栏样式及SafeArea组件等,我们可以实现应用在不同的刘海机型上自适应显示,并且美化布局、提高用户体验。需要注意的是,刘海屏的适配是一个持续的工作过程,需要不断地关注刘海屏机型的更新,及时进行适配。