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.pswp.cn/pingmian/76159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76159.shtml
英文地址,請注明出處:http://en.pswp.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;于是我便開始研究它該如何使用。 一、什么是矢量切片 矢量切片按照我的理解就是用柵格切片的方式把矢…