Maui的学习之路(2)--Mac窗体设置

Maui的学习之路

今天是我开启Maui学习之路的第二天,我不是很高兴又能水一篇文章,我只能说这文章真好水。

话不多说,我们进入正题,昨天解决了WindowsTitleBar以及窗体大小的问题,今天同样的问题,在Mac上又要解决一遍,这真的是让我又气又恨。

有了昨天的经验,今天做Mac的开发就明智了很多,因为我知道微软肯定不会让我好过,于是我直接打开Apple官网,翻到Xcode开发指南,做好准备。

同样在做有关窗体的改动之前,你需要先注册Mac上程序的生命周期函数,找了一圈并没有AddMac这个扩展方法,于是我直接使用AddiOS这个扩展方法(我就是这么优秀,直接就能定位到关键),在OnActive回调中进行我需要的操作,

操作如下:注册生命周期函数(你也可以在重写窗口的OnCreate函数)

ec7b303d4836e1a6d0613bb82d2eabcc.png 11d2596063cedcf09f7a029a0f26260a.png

第一步

需要解决MacTitleBar隐藏的问题,在Mac系统上微软选择了UIKit框架进行实现,这不同于Windows,所以我熟练的打开Apple官方文档,在Apple开发者指南首页立马就能定位到目标对象,真的是超级简单,参考文档:从用 Mac Catalyst 构建的 Mac App 中移除标题栏 - 简体中文文档 - Apple Developer[1]

7b97fcfe31ca4de4872654391c994b69.png
  • 实现步骤:

  1. 获取UIApplication下的主窗体

  2. 隐藏TitleBar

5efd183c0cb04cbf9b5d98dcde1cbedd.png
  • 代码实现:

builder.AddiOS(app =>
 {
     app.OnActivated(e =>
     {
         //var vKeyWindow = e.KeyWindow;
         var vKeyWindow = e.Windows.FirstOrDefault();
         if (vKeyWindow is null)
             return;

         var vTitleBar = vKeyWindow.WindowScene?.Titlebar;
         if (vTitleBar is null)
             return;

         vTitleBar.TitleVisibility = UITitlebarTitleVisibility.Hidden;
         vTitleBar.Toolbar = null;

     })
 });
  • 效果如下:

f4be40db647f55a428d18dbe22591741.png

第二步

需要修改Mac应用窗体的默认大小,这真是个老大难问题,我翻遍了UIKit相关的所有资料(也许没翻全),都没看到但凡一点有关窗体大小的介绍,唯一的介绍是跟View相关(修改Frame),这对我没有鸟用(这是AppKit框架下的实现),还好我的优点就是眼睛比较好,在文档中看到了这样的信息:

fc12c39c191cb712da01261b89eaedaa.png

参考资料:UISceneSizeRestrictions | Apple Developer Documentation[2]

或许修改MinimumSizeMaximumSize可以变相实现窗口尺寸变化,于是,我尝试着修改了一下,发现当我修改MinimumSize时窗体确实发生了变化,不过这里发生一个很诡异的事情,窗体的长宽并不符合我设置的值(发现这个问题是因为我获取到屏幕的size后直接设置进去,窗体并未最大化显示),于是我查了一些资料,发现好像这里要乘以1.3才是实际值,为什么是1.3我不太清楚(有知道的小伙伴可以滴滴),因为他也不是dpi的值,总之经过这一番折腾是能解决问题了,最大化窗口就是将屏幕尺寸直接给进去即可。

d5c9ff21b44dfc1e935311b3aa166c96.png
  • 代码如下:

builder.AddiOS(app =>
{
    app.OnActivated(e =>
    {
        //var vKeyWindow = e.KeyWindow;
        var vKeyWindow = e.Windows.FirstOrDefault();
        if (vKeyWindow is null)
            return;

        var vTitleBar = vKeyWindow.WindowScene?.Titlebar;
        if (vTitleBar is null)
            return;

        vTitleBar.TitleVisibility = UITitlebarTitleVisibility.Hidden;
        vTitleBar.Toolbar = null;

        double nWidth = 1000;
        double nHeight = 500;

        var vScreen = vKeyWindow.Screen;
        var vCGRect = vScreen.Bounds;

        if (nWidth > vCGRect.Width)
            nWidth = vCGRect.Width.Value;

        if (nHeight > vCGRect.Height)
            nHeight = vCGRect.Height.Value;

        vKeyWindow.WindowScene.SizeRestrictions.MinimumSize = new CGSize(nWidth * 1.3, nHeight);
        vKeyWindow.WindowScene.SizeRestrictions.MaximumSize = new CGSize(vCGRect.Width * 1.3, vCGRect.Height * 1.3);
    });
});
  • 效果如下(窗口最大化的演示):

468267dedf164b60c5d601622327000b.png

注意:Apple的程序每次运行后会记住上一次启动窗口的大小,所以 当你首次将界面改大后使用上述的方式并不能将他改小,此时你需要将MaximumSize改小才能让窗口变小。

最终我并未找到怎么开启Mac程序的全屏方案,很抱歉(如果有知道UIKit怎么全屏的朋友欢迎滴滴)。

另外不得不吐槽一点,Apple官方文档太能藏了,微软的开发文档如果是第二那么没人敢说第一,如果我要找Windows API 我只需要进到MSDN一搜一大把,但是说真的我都不知道怎么在苹果官方搜MacOS API

我翻了一下Xamarin.Mac官方文档,当初Xamarin.Mac使用的是Appkit的那套方案实现的,所以好像参考性不是特别大。

不过新奇的我居然发现微软官网的UIKit官方文档居然比Apple提供的还要全面,真是让人欣喜若狂,参考资料:UIKit Namespace | Microsoft Docs[3]

最后还得是我软,巨硬真牛。

参考资料

[1]

参考文档:从用 Mac Catalyst 构建的 Mac App 中移除标题栏 - 简体中文文档 - Apple Developer: 链接:https://developer.apple.com/cn/documentation/uikit/mac_catalyst/removing_the_title_bar_in_your_mac_app_built_with_mac_catalyst/

[2]

参考资料:UISceneSizeRestrictions | Apple Developer Documentation: https://developer.apple.com/documentation/uikit/uiscenesizerestrictions

[3]

参考资料:UIKit Namespace | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/api/uikit?view=xamarin-ios-sdk-12


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值