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

Maui blazor ios 按设备类型设置是否启用safeArea

需求,新做了个app, 使用的是maui blazor技术,里面用了渐变背景,在默认启用SafeArea情况下,底部背景很突兀

  1. 由于现版本maui在SafeArea有点bug,官方教程的<ContentPage SafeArea=false不生效,于是要用以下代码hack一下
            Microsoft.Maui.Handlers.LayoutHandler.Mapper.AppendToMapping("Custom", (h, v) =>
            {
                if (v is Layout layout)
                {
                    layout.IgnoreSafeArea = true;
                }
            });

带来的问题是,网页上下穿透了。

  1. 继续深入研究,用以下代码设置刘海屏上边距
    protected override void OnAppearing()
    {
        base.OnAppearing();
        if (withSafeArea)
        {
            var safeInsets = On<iOS>().SafeAreaInsets();
                On<iOS>().SetUseSafeArea(false);
                safeInsets.Top = 35;
                Padding = safeInsets;
        } 
    }

存在的问题是,非刘海屏设备也设置了上边距

  1. 最终代码,检查设备类型,按需配置上边距
using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;

namespace MyApp.Maui;

public partial class MainPage : ContentPage
{
    bool withSafeArea = false;
    public MainPage()
    {
        InitializeComponent();

        if (DeviceInfo.Current.Idiom == DeviceIdiom.Phone)
        {
            var screenSize = DeviceDisplay.MainDisplayInfo;
            if (screenSize.Height / screenSize.Density >= 812.0f)
            {
                withSafeArea = true;
            }
        }

        if (withSafeArea) { 
            Microsoft.Maui.Handlers.LayoutHandler.Mapper.AppendToMapping("Custom", (h, v) =>
            {
                if (v is Layout layout)
                {
                    layout.IgnoreSafeArea = true;
                }
            });
        }
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        if (withSafeArea)
        {
            var safeInsets = On<iOS>().SafeAreaInsets();
                On<iOS>().SetUseSafeArea(false);
                safeInsets.Top = 35;
                Padding = safeInsets;
        } 
    }
}
  1. 题外话,网页可加上 viewport-fit=cover 效果更好
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />

http://www.kler.cn/a/233708.html

相关文章:

  • 免费,WPS Office教育考试专用版
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • HelloMeme 上手即用教程
  • 项目集章程program charter
  • Android OpenGL ES详解——立方体贴图
  • 使用 start-local 脚本在本地运行 Elasticsearch
  • 思科模拟器命令大全详解
  • 当AGI遇到人形机器人
  • Lua可变参数函数
  • 使用virtualenv管理python环境
  • 如何将ChatGPT升级到4.0版本?如何充值?
  • Acwing---837. 连通块中点的数量
  • PCB板 3.3V和GND导通原因
  • 【NICN】之计算一个数的每位之和(递归实现)
  • Dubbo源码一:【Dubbo与Spring整合】
  • C语言中的宏定义:从常量到高级技巧
  • 十、项目开发总结报告(软件工程)
  • ubuntu篇---ubuntu安装python3.9
  • “深度解析Java虚拟机:运行时数据区域、垃圾收集、内存分配与回收策略、类加载机制“
  • 【前端高频面试题--TypeScript篇】
  • 从Unity到Three.js(画线组件line)
  • 微软AD域替代方案,助力企业摆脱hw期间被攻击的窘境
  • 【MySQL】-12 MySQL索引(上篇MySQL索引类型前置-2-高性能的索引策略)
  • Linux应用 进程间通信之共享内存(System V)
  • Webpack源码浅析
  • 【java苍穹外卖项目实战二】苍穹外卖环境搭建