問題
在進行跨平台應用程式開發的時候,需要面臨到使用一套UI定義,便能夠在不同作業系統下來執行;不過,由於 Xamarin.Forms 採用原生平台控制項來顯示,因此,在 Xamarin.Forms 中同樣的 UI 控制項,可能會在不同作業系統下有著不同的表現。其中,導航工具列就其中一個。導航工具列在不同作業系統下到底呈現樣貌是怎麼樣,有甚麼要特別注意的地方呢?
解答
對於 Xamarin.Forms 中的導航頁面,在各個平台下呈現與操作方式都不太一樣,我們先來看看兩個比較簡單樣貌與操作的平台,那就是 Android & UWP
- Android在下圖,是這個範例應用程式的首頁,由於這是個導航頁面,所以,在最上方有導航工具列。在 Android 平台下,第一個頁面的名稱(Title)會出現在左上方,在這個頁面中,我們實作了一個按鈕,當按下了這個按鈕,將會導航到第二個頁面。在下圖,為導航到第二個頁面的樣貌,同樣的,這個頁面的名稱(Title)會出現在左上方,不過,在頁面名稱的左邊,有個箭頭,那是回上一頁的按鈕,當您按下這個按鈕,就會回到上一個頁面,也就是上圖的首頁;當然,在 Android 平台下,您也可以使用實體回上一頁按鍵,按下這個按鍵,一樣可以回到上一頁。
- UWP在下圖,是這個範例應用程式的首頁,由於這是個導航頁面,所以,在最上方有導航工具列。在 UWP 平台下,第一個頁面的名稱(Title)會出現在左上方,在這個頁面中,我們實作了一個按鈕,當按下了這個按鈕,將會導航到第二個頁面。在下圖,為導航到第二個頁面的樣貌,同樣的,這個頁面的名稱(Title)會出現在左上方,然而,在頁面名稱的左邊,並沒有如同 Android 平台的回上一頁箭頭,當您要回到上一個頁面,可以透過 UWP 手機中的實體回上一頁按鍵來回到上一頁。
- iOS最為複雜的 iOS 平台,在 iOS 平台下,導航頁面的首頁如同下圖,該頁面的名稱(Title)是出現在螢幕的最上方的中間區域,,在這個頁面中,我們實作了一個按鈕,當按下了這個按鈕,將會導航到第二個頁面。預設來說,第二頁如同下圖,新頁面名稱依舊出現在螢幕最上方的中間區域,而在螢幕左上方,會如同 Android 平台,會有個回上一頁按鈕並緊接著上一頁的頁面名稱;不過,在這裡,您看到的是
< Back
這樣的內容,會出現這樣是因為上一頁頁面名稱的文字過長,無法在完全顯示出來,因此,就會顯示< Back
。像這樣的問題,可以有兩種解法,首先,就是要縮點第一個頁面名稱的長度,使其不會因為名稱文字過長,導致顯示不出來;在下圖中,我們將頁面名稱修改成為多奇數位創意
,僅僅六個中文字,這樣就可以在第二頁出現了首頁頁面的名稱。經過調整首頁頁面名稱長度僅有六個中文字,這樣,在第二頁面就會顯示如下圖。這樣做也是可能會遇到問題,那就是每支手機的螢幕解析度與尺寸規格都不盡相同,有時候六個中文字在 A 手機上可以完全顯示出來,可以在 B 裝置上可能會有無法顯示地問提。第二種作法則是比較安全的作法,那就是自行指定回上一頁按鈕文字的名稱,在這裡,我們希望第二頁的回上一頁文字要顯示回去了
,此時,您需要在第一個頁面,也就是首頁,的頁面建構式內,使用這個方法NavigationPage.SetBackButtonTitle(this, "回去了");
,便可以設定第二頁的回上一頁按鈕文字。