Maui的學習之路(2)--Mac窗體設置

Maui的學習之路

今天是我開啟Maui學習之路的第二天,我不是很高興又能水一篇文章,我只能說這文章真好水。

話不多說,我們進入正題,昨天解決了WindowsTitleBar以及窗體大小的問題,今天同樣的問題,在Mac上又要解決一遍,這真的是讓我又氣又恨。

有了昨天的經驗,今天做Mac的開發就明智了很多,因為我知道微軟肯定不會讓我好過,于是我直接打開Apple官網,翻到Xcode開發指南,做好準備。

同樣在做有關窗體的改動之前,你需要先注冊Mac上程序的生命周期函數,找了一圈并沒有AddMac這個擴展方法,于是我直接使用AddiOS這個擴展方法(我就是這么優秀,直接就能定位到關鍵),在OnActive回調中進行我需要的操作,

操作如下:注冊生命周期函數(你也可以在重寫窗口的OnCreate函數)

ec7b303d4836e1a6d0613bb82d2eabcc.png11d2596063cedcf09f7a029a0f26260a.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


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286609.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286609.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之靠譜的Activity從底部向上彈出,finish從頂部向下消失(不黑屏)

1 、需求 要求Activity從底部向上彈出,finish從頂部向下消失(不黑屏) 2、解決辦法 準備3個動畫xml文件 app_bottom_in.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/andro…

ArcGIS10.8中如何獲取線狀、面狀數據的折點,并計算折點坐標?

如下圖所示為面狀要素,ArcGIS10.8中如何獲取線狀和面狀數據的折點(起點、終點、中點、端點),并計算折點的坐標(X,Y,Z,M)? 下圖所示為線狀(Polyline)和面狀(Polygon)要素的起點、終點和折點的示意圖。

Linux命令大總結(早期學習時的筆記)

Linux命令大總結 ------------------------------------------------------------------------------------ 開機自啟動命令行模式和圖形模式&#xff1a; vi /etc/inittab 改3為命令行模式 改5為圖形模式 開關機命令&#xff1a; 關機 init 0 shtudown -h now 重啟…

[轉]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]

本文轉自&#xff1a;http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending a hand to all the people that are, as I have been recently, exploring Cordova and all its features for the first time. For the ones still tr…

【轉】學會這13個原則寫UI界面文案,用戶才能秒懂

原文網址&#xff1a;http://www.niaogebiji.com/article-12011-1.html 摘要: 首先&#xff0c;在寫UI文案之前&#xff0c;為了理清思路&#xff0c;要先搞清楚三個問題&#xff1a;我&#xff08;設計師&#xff09;想讓用戶做什么&#xff1f; – 我寫文案的目的為什么要讓用…

【前端就業課 第一階段】HTML5 零基礎到實戰(一)基礎代碼結構詳解

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

【框架篇】mvc、mvp、mvvm使用關系總結

MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;視圖(view)&#xff0d;控制器(controller)的縮寫&#xff0c;一種軟件設計典范&#xff0c;用一種業務邏輯、數據、界面顯示分離的方法組織代碼&#xff0c;將業務邏輯聚集到一個部件里面&#xff0c…

Blazor University (26)路由 —— 通過代碼導航

原文鏈接&#xff1a;https://blazor-university.com/routing/navigating-our-app-via-code/通過代碼導航源代碼[1]從 Blazor 訪問瀏覽器導航是通過 NavigationManager 服務提供的。這可以使用 razor 文件中的 inject 或 CS 文件中的 [Inject] 屬性注入到 Blazor 組件中。Navig…

Android之使用自定義華為掃描SDK掃描二維碼和識別本地圖片

1、需求 更具UI的設計實現掃描二維碼和識別本地圖片二維碼功能。 zxing掃描二維碼還可以,但是識別本地圖片二維碼功能效果太差,非常不理想,看了看多github很多zxing擴展的開源項目,識別本地圖片二維碼功能效果不樂觀,有些甚至還有裁剪本地圖片,還是不能識別,果斷放棄zb…

Matlab R2016b簡體中文版安裝教程(附Matlab R2016b百度網盤下載地址)

下載的Matlab R2016b軟件安裝包(文末附有下載地址)目錄如下所示: 安裝過程: 1. 安裝主程序R2016b_win64_dvd1.iso和R2016b_win64_dvd2.iso 由于目前大多數及其都是Win8或10系統,所以選中R2016b_win64_dvd1.iso,右鍵→Windows資源管理器打開。Win7系統可以安裝好壓軟件之后…

深度學習String、StringBuffer、StringBuilder

相信String這個類是Java中使用得最頻繁的類之一&#xff0c;并且又是各大公司面試喜歡問到的地方&#xff0c;今天就來和大家一起學習一下String、StringBuilder和StringBuffer這幾個類&#xff0c;分析它們的異同點以及了解各個類適用的場景。下面是本文的目錄大綱&#xff1a…

Leetcode之打印鏈接的倒數第K個節點

1 問題 打印鏈表倒數第K個節點值。 2 代碼實現 #include<stdio.h>//定義一個Node結構體,里面包含了value值和保存了下一個Node的指針(地址) typedef struct Node {int value;Node *next; } Node;//打印鏈表所有的值,循環遍歷一次,因為鏈表節點的最后一個節點肯定是…

MySQL5.5多實例編譯安裝——mysqld_multi

一、MySQL多實例簡介 MySQL多實例&#xff0c;簡單地說&#xff0c;就是在一臺服務器上同時開啟多個不同的服務端口&#xff08;如&#xff1a;3306、3307&#xff09;&#xff0c;同時運行多個MySQL服務進程&#xff0c;這些服務進程通過不同的socket監聽來自不同的端口來提供…

【前端就業課 第一階段】HTML5 零基礎到實戰(二)超鏈接

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

架構,框架,模式,模塊、組件、插件的含義和區別

架構、框架、模式、模塊、組件、插件、控件、中間件的含義和區別。經常看到這些概念&#xff0c;但是有些含糊&#xff0c;花點兒功夫整理一下&#xff0c;結果還是有些地方理解的不透徹&#xff0c;先將整理的內容寫下來&#xff0c;以供交流。左側英文欄中有些單詞被分成了兩…

C語言,C#語言求100-999內的水仙花數源程序

水仙花數&#xff08;Narcissistic number&#xff09;也被稱為超完全數字不變數&#xff08;pluperfect digital invariant, PPDI&#xff09;、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數&#xff08;Armstrong number&#xff09;&#xff0c;水仙花數是指一個 3 位數&#…

一個精簡的C#表達式執行框架Dynamic Expresso

一、簡介Dynamic Expresso是一個用.NET Standard 2.0編寫的簡單c#語句的解釋器。Dynamic Expresso嵌入了自己的解析邏輯&#xff0c;通過將其轉換為.NET lambda表達式或委托來解釋c#語句。使用Dynamic Expresso開發人員可以創建可編寫腳本的應用程序&#xff0c;無需編譯即可執…

算法馬拉松13 A-E解題報告

A題意&#xff08;取余最長路&#xff09;: 佳佳有一個n*m的帶權矩陣&#xff0c;她想從(1,1)出發走到(n,m)且只能往右往下移動&#xff0c;她能得到的娛樂值為所經過的位置的權的總和。 有一天&#xff0c;她被下了惡毒的詛咒&#xff0c;這個詛咒的作用是將她的娛樂值變為對p…

Modis數據處理工具:MRT百度網盤下載和手把手圖文安裝教程

如下圖所示為 MODIS Reprojection Tool(MRT)的軟界面,看似簡單,卻是Modis遙感影像必不可少的處理工具,如投影變換等。本文以圖文并茂的形式,詳細講解MRT軟件在Windows10平臺上的安裝過程,并附MRT軟件百度網盤下載地址。 Modis Tool主界面: 一、安裝過程 1、安裝Jav…

Word中如何設置圖片與段落的間距為半行

第一種&#xff1a; 正文為5號&#xff0c;那么圖片或者Viso對象前后空一行&#xff0c;設置字號為7號或者更小&#xff0c;這樣設置的間距就是那個7號字的間距&#xff0c;比5號小&#xff0c;看著空白不是那么大。 第二種&#xff1a; Visio對象轉為jpg&#xff0c;然后選中圖…