出现问题前,是因为一个盒子我用了绝对定位position: absolute,在其他机型正常,在iPoneX上就出现问题

出现问题前代码

<template>
	<view class="mian">
		<view class="box">
			<view class="sao">
				<view class="icon">
					<iconfont name="scan" size="50rpx" color="#fff"></iconfont>
				</view>
				<view class="name">扫一扫</view>
			</view>
			<view class="left">
				<view class="item">
					<view class="icon">
						<iconfont name="a-huiyuan1" size="45rpx"></iconfont>
					</view>
					<view>会员</view>
				</view>
				<view class="item">
					<view class="icon">
						<iconfont name="dingdan" size="45rpx"></iconfont>
					</view>
					<view>历史订单</view>
				</view>
			</view>
			<view class="right">
				<view class="item">
					<view class="icon">
						<iconfont name="shangpin" size="45rpx"></iconfont>
					</view>
					<view>订单</view>
				</view>
				<view class="item">
					<view class="icon">
						<iconfont name="yonghuming" size="45rpx"></iconfont>
					</view>
					<view>我的</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				aaa: 1
			}
		},
		computed: {

		},
		methods: {

		}
	}
</script>

<style lang="scss" scoped>
	.mian {
		position: fixed;
		left: 0;
		bottom: 0;
		background-color: #fff;
		height: 130rpx;
		width: 100%;
		box-shadow: 2rpx -4rpx 6rpx 0px #0000001a;
		font-size: 30rpx;
		
	    padding:calc(env(safe-area-inset-bottom) + 15rpx)  0 calc(env(safe-area-inset-bottom) + 15rpx) 0;
		.box {
			width: 100%;
			height: 100%;
			display: flex;
			position: relative;
			align-items: center;
			justify-content: space-between;

			.sao {
				position: absolute;
				top: -45rpx;
				
				left: 315rpx;

				.icon {
					width: 130rpx;
					height: 130rpx;
					display: flex;
					justify-content: center;
					align-items: center;
					border-radius: 50%;
					border: 15rpx solid #fff;
					box-shadow: 0px -2rpx 2rpx 0 #00000057;
					background-color: #0e67fe;
				}
				.name{
					text-align: center;
				}
			}

			.left,
			.right {
				width: 40%;
				height: 100%;
				display: flex;
				// flex-direction: column;
				justify-content: space-around;
				align-items: center;

				.item {
					width: 50%;
                      display: flex;
					  flex-direction: column;
					  align-items: center;
					.icon {
                       width: 50%;
					   height: 100%;
					   padding: 10rpx;
					   display: flex;
					   justify-content: center;
					   align-items: center;
						// padding: 10rpx;
						margin-bottom: 5rpx;
						border: 2rpx solid #999;
					}
				}

			}
		}
	}
</style>

解决问题后的效果

 解决问题需要算出距离top高度,top: calc(-1 * (env(safe-area-inset-bottom) + 55rpx)); 是其他机型正常显示的top加上iPhoneX高度*-1就好

解决后的代码

<template>
	<view class="mian">
		<view class="box">
			<view class="sao">
				<view class="icon">
					<iconfont name="scan" size="50rpx" color="#fff"></iconfont>
				</view>
				<view class="name">扫一扫</view>
			</view>
			<view class="left">
				<view class="item">
					<view class="icon">
						<iconfont name="a-huiyuan1" size="45rpx"></iconfont>
					</view>
					<view>会员</view>
				</view>
				<view class="item">
					<view class="icon">
						<iconfont name="dingdan" size="45rpx"></iconfont>
					</view>
					<view>历史订单</view>
				</view>
			</view>
			<view class="right">
				<view class="item">
					<view class="icon">
						<iconfont name="shangpin" size="45rpx"></iconfont>
					</view>
					<view>订单</view>
				</view>
				<view class="item">
					<view class="icon">
						<iconfont name="yonghuming" size="45rpx"></iconfont>
					</view>
					<view>我的</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				aaa: 1
			}
		},
		computed: {

		},
		methods: {

		}
	}
</script>

<style lang="scss" scoped>
	.mian {
		position: fixed;
		left: 0;
		bottom: 0;
		background-color: #fff;
		height: 130rpx;
		width: 100%;
		box-shadow: 2rpx -4rpx 6rpx 0px #0000001a;
		font-size: 30rpx;
		
	    padding:calc(env(safe-area-inset-bottom) + 15rpx)  0 calc(env(safe-area-inset-bottom) + 15rpx) 0;
		.box {
			width: 100%;
			height: 100%;
			display: flex;
			position: relative;
			align-items: center;
			justify-content: space-between;

			.sao {
				position: absolute;
				top: calc(-1 * (env(safe-area-inset-bottom) + 55rpx));
				left: 315rpx;

				.icon {
					width: 130rpx;
					height: 130rpx;
					display: flex;
					justify-content: center;
					align-items: center;
					border-radius: 50%;
					border: 15rpx solid #fff;
					box-shadow: 0px -2rpx 2rpx 0 #00000057;
					background-color: #0e67fe;
				}
				.name{
					text-align: center;
				}
			}

			.left,
			.right {
				width: 40%;
				height: 100%;
				display: flex;
				// flex-direction: column;
				justify-content: space-around;
				align-items: center;

				.item {
					width: 50%;
                      display: flex;
					  flex-direction: column;
					  align-items: center;
					.icon {
                       width: 50%;
					   height: 100%;
					   padding: 10rpx;
					   display: flex;
					   justify-content: center;
					   align-items: center;
						// padding: 10rpx;
						margin-bottom: 5rpx;
						border: 2rpx solid #999;
					}
				}

			}
		}
	}
</style>

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐