UniApp 页面布局自定义头部导航

动态计算头部高度与内容偏移量:实现 UniApp 页面布局的精准适配

在移动端应用开发中,页面布局的精准适配是一个关键问题。尤其是在 UniApp 中,不同设备的屏幕尺寸、状态栏高度以及头部布局的差异,可能导致页面内容错位或显示不全。本文将分享如何通过动态计算头部高度,实现页面内容的精准定位,确保在不同设备上都能正确显示。


问题背景

在移动端页面中,通常会有固定的头部(如导航栏、搜索框等),而页面内容需要根据头部的高度动态调整位置,以避免内容被遮挡。例如,在 UniApp 中,状态栏高度和头部高度可能因设备而异,因此需要动态计算并设置内容的 margin-top


实现思路

  1. 获取状态栏高度

    • 使用 uni.getSystemInfoSync() 获取设备的状态栏高度。
  2. 动态计算头部高度

    • 使用 uni.createSelectorQuery() 获取头部元素的高度。
  3. 设置内容偏移量

    • 根据头部高度和状态栏高度,动态计算并设置内容的 margin-top

实现代码

以下是实现后的完整代码:

<template><view class="container"><!-- 头部 --><view class="mp-header"><view class="sys-head" :style="{ height: statusBarHeight }"></view><view class="serch-box" :style="{ height: searchBoxHeight + 'px' }"><view class="serch-wrapper"><image@click="handleUrl('/pages/mine/message/index')"class="logo-left"src="@/static/new-img/index-icon1.png"mode="widthFix"></image><imageclass="logo-cen"src="@/static/new-img/index-icon2.png"mode="widthFix"></image></view></view></view><!-- 内容区域 --><view class="part part1" :style="{ marginTop: `${poTop}px` }">测试</view></view>
</template><script>
export default {data() {return {statusBarHeight: "0px", // 状态栏高度searchBoxHeight: 40, // 搜索框高度poTop: 0, // 动态计算的偏移量};},onLoad() {this.getSystemInfo();this.getHeaderHeight();},methods: {// 获取系统信息getSystemInfo() {const systemInfo = uni.getSystemInfoSync();this.statusBarHeight = systemInfo.statusBarHeight + "px";},// 获取头部高度并计算偏移量getHeaderHeight() {uni.createSelectorQuery().select(".mp-header").boundingClientRect((data) => {// 计算 poTop:头部高度 + 固定值 84this.poTop = Number(data.height) + 84;}).exec();},// 处理导航跳转handleUrl(url) {uni.navigateTo({url: url,});},},
};
</script><style scoped lang="scss">
.container {position: relative;
}.mp-header {z-index: 999;position: fixed;left: 0;top: 0;width: 100%;background: #fff;.serch-wrapper {height: 100%;position: relative;padding: 8rpx 20rpx;.logo-cen {width: 194rpx;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);}.logo-left {width: 48rpx;height: 48rpx;position: absolute;left: 30rpx;top: 50%;transform: translateY(-50%);}}
}
</style>

代码解析

  1. 状态栏高度

    • onLoad 生命周期中调用 getSystemInfo(),获取设备的状态栏高度并存储在 statusBarHeight 中。
  2. 头部高度

    • getHeaderHeight() 方法中,使用 uni.createSelectorQuery() 获取 .mp-header 的高度,并计算 poTop(头部高度 + 固定值 84)。
  3. 动态调整内容位置

    • part1margin-top 设置为 poTop,确保内容区域根据头部高度动态调整。

实现效果

  • 兼容性:通过动态计算状态栏高度和头部高度,确保页面在不同设备上都能正确显示。
  • 可维护性:代码结构清晰,逻辑明确,便于后续维护和扩展。

总结

通过动态计算头部高度和状态栏高度,我们可以有效解决移动端页面布局的适配问题。本文提供的实现方案不仅适用于 UniApp,也可以为其他移动端开发框架提供参考。希望这篇博客能帮助你更好地理解和实现动态布局的精准适配!


如果你有更多问题或需要进一步优化,欢迎在评论区留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

verilog学习--1、语言要素

先看一个例子 /*This is first Verilog progaram*/ timescale 1ns/1ns module HalfAdder(A,B,Sum,Carry);input A,B;output Sum, Carry; /**/assign #2 SumA^B;assign #5 CarryA&B&#xff1b; endmodule; Verilog以module为单位编写&#xff0c;每个文件一个module&#…

AC 自动机 洛谷P3808 P3796 P5357

洛谷P3808 #include <bits/stdc.h> using namespace std; const int maxn 1e6 5; int ch[maxn][30], fa[maxn], End[maxn]; int cnt 0 , n; int get_num(char c){return c - a;} void build(string s){int cur 0, len s.length();for(int i 0; i < len; i){int…

C++蓝桥杯实训篇(二)

片头 嗨咯~小伙伴们&#xff01;今天我们来一起学习算法和贪心思维&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数位排序 对于这道题&#xff0c;我们需要自己写一个排序算法&#xff0c;也就是自定义排序&#xff0c;按照数位从小到大进行排序。 举一…

redisson常用加锁方式

RLock lock redissonClient.getLock("lock:order:" order);和redissonDistributedLocker.tryLock("lock:order:" order&#xff0c; TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);这两种加锁方式的区别如下&…

Go 微服务框架 | 路由实现

文章目录 不用框架实现web接口实现简单的路由实现分组路由支持不同的请求方式支持同一个路径的不同请求方式前缀树应用前缀树完善路由代码 不用框架实现web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通过模板实现自动发现对tcp端口批量监控

主要为了解决监控大量端口&#xff0c;避免繁琐的重复操作监控项和触发器 诸位~ 仅供参考哈 自动发现监控参考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先创建一个模板 自定义名称和群组 创建自动发现规则 模板——自动发现——创建发现规则…

Mysql备忘记录

1、简介 Mysql操作经常忘记命令&#xff0c;本文将持续记录Mysql一些常用操作。 2、常见问题 2.1、忘记密码 # 1、首先停止Mysql服务 systemctl stop mysqld # windows 从任务管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【蓝桥杯】15届JAVA研究生组F回文字符串

一、思路 1.这题去年考的时候想的是使用全排列进行尝试&#xff0c;实际不用这么麻烦&#xff0c;只用找到第一个和最后一个非特殊字符串的位置&#xff0c;然后分别向内检查是否对称&#xff0c;向外检查是否对称直到左指针小于0(可以通过添加使其对称) 2.至于如何找到第一个…

X 进制减法

题目链接&#xff1a; 思路&#xff1a; X进制数321怎么转换为十进制数为65&#xff1f;如下图&#xff1a; ①题目要求我们求 A - B 的最小值&#xff0c;对第 i 位&#xff0c;要求 A[i] - B[i] 的最小值&#xff0c;当进制越小的时候差值越小&#xff0c;但进制要比 max&…

java线程安全-单例模式-线程通信

首先看看单例模式的写法 首先我们先来回顾一下饿汉式单例模式&#xff1a; class Singleton{private static Singleton singletonnew Singleton();private Singleton(){}public static Singleton getInstrance(){return singleton;} } public class Test{public static void …

大数据技术之SPARK

Spark Core 什么是 RDD 代码中是一个抽象类&#xff0c;它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合 弹性 存储的弹性&#xff1a;内存与磁盘的自动切换&#xff1b; 容错的弹性&#xff1a;数据丢失可以自动恢复&#xff1b; 计算的弹性&#xff1a;…

Go 语言范围 (Range)

Go 语言范围 (Range) Go 语言是一种静态强类型、编译型、并发型编程语言&#xff0c;由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中&#xff0c;range 是一个非常有用的关键字&#xff0c;用于遍历数组、切片、字符串以及通道&#xff08;channe…

VUE中数据绑定之OptionAPI

<template> <div> 姓名:<input v-model="userName" /> {{ userName }} <br /> 薪水:<input type="number" v-model="salary" /> <br /> <button v-on:click="submit">提交</button>…

react动态路由

框架的权限控制&#xff08;在config.ts中配置&#xff09; export default {access: {}, }; 权限配置文件&#xff08;access.ts&#xff09; 新建 src/access.ts &#xff0c;在该文件中 export default 一个函数&#xff0c;定义用户拥有的权限 该文件需要返回一个 functi…

Android里面如何优化xml布局

在 Android 开发中&#xff0c;以下是系统化的优化方案&#xff0c;从基础到高级分层解析&#xff1a; 一、基础优化策略 1. 减少布局层级 问题&#xff1a;每增加一层布局&#xff0c;测量/布局时间增加 1-2ms 解决方案&#xff1a; <!-- 避免嵌套 --> <LinearLayo…

基于STM32、HAL库的IP6525S快充协议芯片简介及驱动程序设计

一、简介: IP6525S是一款高性能的同步降压DC-DC转换器芯片,具有以下特点: 输入电压范围:4.5V至32V 输出电压范围:0.8V至30V 最大输出电流:5A 效率高达95% 可编程开关频率(100kHz-1MHz) 支持PWM和PFM模式 内置过流保护、过温保护等功能 该芯片常用于工业控制、通信设备…

二分算法的入门笔记

二分查找 使用前提&#xff1a;有序。可理解为枚举的一种技巧。时间复杂度&#xff1a; l o g ( n ) log(n) log(n) 基础模版代码 使用时根据情景进行相应的变化。注意跳出条件and分支处理方式and返回答案&#xff0c;三者之间的配合&#xff0c;不要进入死循环。可以在模拟…

轻量级Java跨包调用(完全解耦)

Java函数式命令模式 轻量级跨包调用解耦方案&#xff0c;让跨包调用就像调用本地接口那样简单。适用与具有公共依赖的两个jar包&#xff0c;但是又不想相互引入对方作为依赖。 函数式命令模式&#xff0c;很好地实现了跨包调用解耦的目标&#xff0c;并且通过泛型JSON动态转换保…

离散数学问题集--问题5.9

问题 5.9 综合了计算机组成原理、数字逻辑和离散数学中的关键概念&#xff0c;旨在帮助学生理解二进制算术运算的硬件实现、逻辑门与算术运算的关系&#xff0c;以及如何使用数学方法来验证数字系统的正确性。它强调了从规范到实现再到验证的完整过程。 思想 函数抽象&#xf…

OpenLayers:海量图形渲染之矢量切片

最近由于在工作中涉及到了海量图形渲染的问题&#xff0c;因此我开始研究相关的解决方案。在咨询了许多朋友之后发现矢量切片似乎是行业内最常用的一种解决方案&#xff0c;于是我便开始研究它该如何使用。 一、什么是矢量切片 矢量切片按照我的理解就是用栅格切片的方式把矢…