解决方案1.在页面上添加填充
Page类定义了一个名为Padding的属性,用于标记内容不能侵入的页面内部周围的区域。 Padding属性的类型是Thickness,它是一个定义了名为Left,Top,Right,Bottom的四个属性的结构。 (您可能需要记住该顺序,因为这是您在厚度构造函数以及XAML中定义属性的顺序。)厚度结构还定义了构造函数,用于在所有四边上设置相同的填充量或设置 在左边和右边,在顶部和底部相同的金额。
在你最喜欢的搜索引擎中进行一些研究,可以发现iOS状态栏的高度为20(二十个,你可能会问,二十个像素,实际上,现在只是把它们看作20个单位。 大部分的Xamarin.Forms编程,你不需要打扰数字大小,但是第5章,“处理大小”,将提供一些指导,当你需要到像素级。)
你可以像这样容纳状态栏:
点击(此处)折叠或打开
namespace Greetings
{
public class GreetingsPage : ContentPage
{
public GreetingsPage ()
{
Content = new Label
{
Text = "Greetings, Xamarin.Forms!"
};
Padding = new Thickness(0, 20, 0, 0);
}
}
}
现在问候出现在页面顶部20个单位:
在ContentPage上设置Padding属性可以解决文本覆盖iOS状态栏的问题,但是它也会在Android和Windows Phone上设置相同的填充,不需要填充。 有没有办法只在iPhone上设置这个填充?
解决方案2.仅包含适用于iOS的填充(仅限SAP)
共享资产项目(SAP)方法的优点之一是项目中的类是应用程序项目的扩展,因此您可以使用条件编译指令。
让我们试试这个。 我们需要一个基于SAP模板的名为GreetingsSap的新解决方案,以及一个名为GreetingsSapPage的GreetingsSap项目中的新页面类。 要仅在iOS中设置填充,该类看起来像这样:
点击(此处)折叠或打开
{
public class GreetingsSapPage : ContentPage
{
public GreetingsSapPage ()
{
Content = new Label
{
Text = "Greetings, Xamarin.Forms!"
};
#if __IOS__
Padding = new Thickness(0, 20, 0, 0);
#endif
}
}
}
if指令引用了条件编译符号__IOS__,所以Padding属性只是为iOS项目设置的。 结果如下所示:
但是,这些条件编译符号只影响程序的编译,所以在PCL中不起作用。 有没有办法让PCL项目为不同的平台包含不同的填充?