首页 > 其他分享 >MAUI IOS如何弹起键盘时调整页面大小

MAUI IOS如何弹起键盘时调整页面大小

时间:2024-04-24 22:33:52浏览次数:18  
标签:void IOS Padding showSoftKeyboard 弹起 MAUI keyboardHideObserver keyboardShowObser

#if IOS
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Platform;
using UIKit;
#endif

namespace YourProject
{
#nullable disable
    public class MainPage
    {
	    public MainPage()
        {
            InitializeComponent();
#if IOS
            Initialize();
#endif
        }
#if IOS
        double paddingBottom = 0;

        bool showSoftKeyboard;

        NSObject _keyboardShowObserver;

        NSObject _keyboardHideObserver;

        ~MainPage()
        {
            UnregisterForKeyboardNotifications();
        }

        void Initialize()
        {
            this.Padding = new(Padding.Left, Padding.Top, Padding.Right, paddingBottom);
            RegisterForKeyboardNotifications();
        }

        // On the iOS platform, adjust the window size when the soft keyboard pops up
        // https://github.com/dotnet/maui/issues/10662
        void OnKeyboardShow(object sender, UIKeyboardEventArgs args)
        {
            if (showSoftKeyboard)
            {
                return;
            }

            showSoftKeyboard = true;
            NSValue result = (NSValue)args.Notification.UserInfo.ObjectForKey(new NSString(UIKeyboard.FrameEndUserInfoKey));
            CGSize keyboardSize = result.RectangleFValue.Size;

            paddingBottom = this.Padding.Bottom;
            this.Padding = new Thickness(Padding.Left, Padding.Top, Padding.Right, keyboardSize.Height);
        }

        void OnKeyboardHide(object sender, UIKeyboardEventArgs args)
        {
            if (!showSoftKeyboard)
            {
                return;
            }

            showSoftKeyboard = false;

            this.Padding = new Thickness(Padding.Left, Padding.Top, Padding.Right, paddingBottom);
        }

        void RegisterForKeyboardNotifications()
        {
            _keyboardShowObserver ??= UIKeyboard.Notifications.ObserveWillShow(OnKeyboardShow);
            _keyboardHideObserver ??= UIKeyboard.Notifications.ObserveWillHide(OnKeyboardHide);
        }

        void UnregisterForKeyboardNotifications()
        {
            if (_keyboardShowObserver is not null)
            {
                _keyboardShowObserver.Dispose();
                _keyboardShowObserver = null;
            }

            if (_keyboardHideObserver is not null)
            {
                _keyboardHideObserver.Dispose();
                _keyboardHideObserver = null;
            }
        }
#endif
    }
}

标签:void,IOS,Padding,showSoftKeyboard,弹起,MAUI,keyboardHideObserver,keyboardShowObser
From: https://www.cnblogs.com/Yu-Core/p/18156524

相关文章

  • 基于DE1-SOC的Nios V工程——my_first_niosv
    一、NiosV简介目前Intel推出了三款Nios®V处理器(图片来自Intel官网): (点击图可放大)  这里面功能最强的是NiosV/g,用户可根据实际需求选择对应的软核。 截图来自Nios®V嵌入式处理器设计手册:  二、开发工具下载目前Quartus22.1及以上版本都支持NiosV了,本文以......
  • Cisco Catalyst 9800 Wireless Controller, IOS XE Software Release IOSXE-17.14.01
    CiscoCatalyst9800WirelessController,IOSXESoftwareReleaseIOSXE-17.14.01EDCatalyst9800系列无线控制器软件请访问原文链接:CiscoCatalyst9800WirelessController,IOSXESoftwareReleaseIOSXE-17.14.01ED,查看最新版。原创作品,转载请保留出处。作者主页:sy......
  • Cisco Catalyst 9800-CL Wireless Controller for Cloud, Release IOSXE-17.14.01 ED
    CiscoCatalyst9800-CLWirelessControllerforCloud,ReleaseIOSXE-17.14.01ED面向云的思科Catalyst9800-CL无线控制器,专为基于意图的网络全新打造请访问原文链接:CiscoCatalyst9800-CLWirelessControllerforCloud,ReleaseIOSXE-17.14.01ED,查看最新版。原创作......
  • Axios 请求拦截器和响应拦截器配置
    简易模式 importaxiosfrom'axios'constaxiosInstance=axios.create({  baseURL:baseUrl,  timeout:1000*60*1,  responseType:'json',  insecureHTTPParser:true,  headers:{    'Content-Type':'......
  • node环境axios(AxiosError: Parse Error: Invalid header value char)解决方案
    最近在做一个electron项目时,需要在node环境使用axios请求,我试图向API发出请求,但我得到了这个错误:AxiosError:ParseError:Invalidheadervaluechar问题在于API返回的响应头中的值包含不允许的字符。Node.js的HTTP解析器比Web浏览器使用的解析器更严格,这可以防止抓取服务......
  • 【教程】iOS应用上架流程详解
     引言......
  • 2024-04-22 微信小程序开发之ios输入框光标指向不正确
    业务场景:微信小程序开发中,页面有一个固定在底部(实测只要是设置了固定的输入框都会这样,如果可以改变布局,不固定定位则可避免此问题)的输入框,点击输入框输入文字,操作流程完成。但是!在神奇的ios系统中却不行,就是点击输入框,你是无法触发到输入框的,说白了点不到,安卓就没有这毛病。原......
  • 安卓测试跟ios 测试有什么区别?
    一、概览安卓测试和iOS测试之间有一些区别,这些区别主要是由于两个平台的技术架构、开发工具和生态系统的差异导致的。以下是一些主要的区别: 二、具体内容开发语言和框架:安卓应用通常使用Java、Kotlin或者其他JVM语言进行开发,而iOS应用则使用Objective-C或Swift......
  • MAUI Android 透明状态栏/导航栏(也有叫沉浸式的)
    不说任何废话,上代码,不好用来打我Platforms/Android/MainActivity.csprotectedoverridevoidOnCreate(BundlesavedInstanceState){Google.Android.Material.Internal.EdgeToEdgeUtils.ApplyEdgeToEdge(Window,true);if(Operatin......
  • .NET开源免费的跨平台框架 - MAUI(附学习资料)
    前言前几天分享了一个.NETMAUI开源免费的UI工具包-Uranium,然后技术群有不少同学问.NETMAUI是不是免费的?能做什么?今天特意写这篇文章来介绍一下.NET开源、免费(基于MITLicense)的跨平台框架:MAUI。.NETMAUI官方介绍.NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用......