0条留言

pexels-photo-316465


开发应用程序时,您的设计可能需要使用开箱即用的iOS字体。因此,让我们看看如何将自定义字体添加到一个应用中,以及如何在情节提要或代码中使用它。

添加字体

假设您已经有了字体,请注意,iOS支持以TTF或OTF格式存储的字体。自定义字体被复制到iOS项目的Resource文件夹中。

ios项目的图像,在resoucres文件夹中名为fonts的子文件夹中显示自定义字体文件

确保将字体文件的属性设置为 BundleResource。

创建字体子文件夹是可选的。但是由于资源项目倾向于在较大的项目中收集几个项目。让我们从头开始整理一下 Smile

要使用字体,我们必须更新 信息清单 文件包含以下几行:

image

注意:在Visual Studio 15.5.4中编写时,您必须打开 信息清单 XML编辑器中的文件。为此,请右键单击文件,然后选择“ 打开用… ”,然后选择 XML(文本)编辑器。在Visual Studio for Mac中,GUI 信息清单 编辑器支持直接编辑源。

在情节提要中使用自定义字体

添加例如 UILabel 到情节提要中,选择它。在选项中,单击字体,然后选择自定义字体。

Storyboard

在代码中使用自定义字体

在后面的代码中,使用自定义字体非常简单。例如,在标签中,我们可以如下设置Font属性:

image

当运行具有合并的情节提要和新标签的应用程序时,结果为:

自定义字体截图

结论

在本博文中,我们介绍了添加自定义字体所必须采取的步骤。请注意,字体是在应用程序启动期间加载的,如果您对字体一窍不通,可能会注意到一些性能影响。

您可以在上找到一个小样本 的GitHub 。用于在代码定义的UI中设置约束 PureLayout.Net 被使用了。

0条留言

pexels-photo-64774

更新: 嘿,谢谢您阅读我的博客,自从我写了这篇文章以来,我学到了很多东西,并且找到了一种更好的方式来迁移Xamarin Apps,所以请查看我的最新文章。 博客文章 在这个问题上。

如果您还没有听说过或沉迷于.Net Standard,那您将大饱口福。简而言之,它提供了一种跨平台共享代码的方法,但是与PCL相比,它为您提供了更多的平台特定功能。有关深入的概述,请查看 官方文档 .

注意: 如果今天使用Visual Studio(VS)2015.4开始新项目,则默认情况下将无法选择.Net Standard。但是 .Net标准的新模板 将包含在Visual Studio 15.5中。

创建.Net标准类库

将现有应用程序迁移到.Net Standard非常简单。第一步,添加一个.Net标准库来替换您的PCL项目。

在“ VS添加新项目”对话框的“ Visual C#”下,选择“类库”(.Net标准)

迁移您的源代码

然后将所有现有文件从PCL项目拖放到.Net Standard库。请注意,您不想复制 packages.config 或下的任何文件 属性 .

CopyFiles

现在,您可以删除已迁移的PCL项目。如果从Visual Studio中这样做,请注意该项目在文件系统中仍然可用。这意味着如果您忘记了某些内容,仍然可以使用它,但是这也意味着以后如果要从源代码管理工作区中删除它,则必须将其删除。

下一步是添加您在PCL项目中使用的所有NuGet软件包。如果您在添加某些软件包时遇到问题,请查找由于.Net Standard支持(例如文件系统访问)而不再需要的NuGet软件包。在其他情况下,可能是因为NuGet软件包尚未(希望如此)迁移到.Net Standard。在这种情况下,请检查一下 发布 并且不要忘了问项目的维护者何时该项目可用于.Net Standard。  眨眼的微笑

挂钩项目

现在,您可以在Android和iOS项目中添加对.Net Standard的引用。如果创建了新的命名空间,强烈建议您在将它们添加到项目后对其进行重构。否则,您选择的重构工具将只能发挥一半的魔力,您仍然需要做一些工作。

如果您使用的是UWP项目,请阅读下面的内容,因为您将需要执行一些其他步骤才能使其正常工作。

修复Xamarin表单的csproj

不幸的是,将Xamarin Forms应用程序移至.Net Standard时,会出现奇怪的编译错误。原因是在csproj文件中引用了XAML文件:

02_1_RemoveEmbeddedResources

只需删除它们就可以了,编译错误应该是历史记录。

使用UWP时

如果您将UWP用作目标(即使用VS 2015.4之前提供的默认项目)。您将必须删除并重新添加项目:

如果不确定是否真的必须更新您的UWP项目。检查您的UWP项目中是否有project.json文件。如果答案是肯定的,那么恐怕您将必须执行以下步骤。

  1. 从Visual Studio中的解决方案中删除UWP项目
  2. 重命名文件浏览器中的UWP项目文件夹
  3. 在Visual Studio中添加一个新的UWP项目(与刚刚删除的名称相同)
  4. 将最低支持的Windows 10版本设置为Fall Creators Update

    目标和最低版本设置为Fall Creators Update的VS对话框窗口
  5. 添加刚刚删除的项目所拥有的任何NuGet引用(如果您不确定要添加哪些包,则可以在更名的位置窥探project.json文件)
  6. 复制并粘贴所有UWP文件(project.json除外)
  7. 添加对标准库项目的引用

如果您知道升级UWP项目的简便方法,请在下面的评论中告诉我 Smile

结论

在本文中,我们介绍了将现有PCL项目迁移到.Net Standard所需的步骤。所有步骤都是使用Visual Studio 15.4完成的。

3条留言

pexels-photo-277803

编写仅允许用户登录时访问该应用程序某些或所有部分的应用程序时,需要登录屏幕,该屏幕可以在应用程序的每个屏幕上显示给用户要求他立即登录或重新登录。

在本文中,您将看到如何创建可用于输入用户名和密码的视图。此外,我们将研究如何使用此屏幕,而不管当前向用户显示哪个屏幕。

编写登录视图

让我们考虑以下观点。

LoginScreen

它需要用户名和密码,用户可以通过单击将确认其输入的按钮来确认其输入。

输入正确的登录名后,将向用户显示应用程序内容。在我们的例子中,一个简单的屏幕包含一个注销按钮。

到目前为止一切正常,但是我们如何确保用户仅在登录后才能看到内容?我们如何防止用户表单仅解雇页面?接下来,让我们深入探讨该主题。

登录站点和导航

因此,实现视图甚至登录站点的业务逻辑非常简单,但是无论何时需要用户进行身份验证,即我们如何弹出登录视图。必须重新认证?以及我们如何防止他离开屏幕。幸运的是,所有这些都可以通过使用支持到 Xamarin 形式 。利用一个简单的导航服务 以前的帖子 ,我们可以确保从任何页面甚至在恢复应用程序或启动时都调用到登录页面的导航:

通过简单的方式使用模式导航 导航服务使我们能够实现一个登录对话框,该对话框可弹出当前显示的任何视图,并在用户经过正确身份验证后返回到敏感内容。

无路可返

尽管模式页面没有为用户提供导航栏中的软件按钮以返回到上一页。用户仍然可以使用Android和Windows 10上的专用OS后退按钮。为确保用户无法通过OS按钮离开页面, OnBackButtonPressed 方法必须被重写,如下所示:

即时登录查看导航

当要求用户登录应用程序的初次启动或继续时。通常,希望将登录视图简单地覆盖在用户成功通过身份验证后应显示的页面上。我们不希望用户在登录之前看到登陆页面。要达到此效果,我们可以在页面显示给用户之前插入检查,然后不带动画地导航到登录页面:

改善用户输入体验

创建用户登录名时,最好是用户可以通过键盘上的Enter键从用户名导航到密码字段。输入密码后,可以按Enter键直接验证用户名和密码。可以在登录视图后面的代码中完成此操作,如下所示:

结论

在此博客文章中,我们看到了如何为登录页面创建视图并实现其背后的逻辑。通过模式导航,我们看到了如何在用户输入一些有效凭据之前“捕获”视图上的用户,并防止他离开视图。

然后,我们通过在恢复或启动应用程序时立即显示登录页面来改进UX。加上改进了用户名和密码的输入。

您可以在以下位置找到登录视图的示例 的GitHub .

3条留言

pexels-photo-297755

如果您曾经编写过Xamarin Forms应用程序,并且想从View Model内导航到另一个页面。然后,您解决了导航逻辑通常驻留在视图中的问题。由于每篇最佳实践博客文章,课程和视频都告诉我们,视图和业务/控制逻辑应该分开。我们经常被问到如何集成基于视图模型的导航的问题。

我们想做什么

这篇文章的目的是向您展示我们如何从View Model发起导航调用。无需在视图中添加依赖项或编写回调方法。

导航101

在Xamarin Forms中,有两种在页面之间导航的基本方法:

  • 模态

导航是在应用程序中导航的最直接的方法。主页面 App.xaml.cs 是一个 导航页 其中包含显示给用户的主页:

导航到下一页时,该页面被推入导航堆栈。然后,用户可以通过屏幕(iOS&Windows)或硬件按钮(Android&视窗)。向后导航将放置当前页面,从导航堆栈中弹出页面并将其显示给用户。

使用导航到页面时 模态 。目标页面显示在单独的导航上下文中。这导致无法再通过OS中的软件后退按钮显示用户。后退导航呼叫与“推送”有所不同。因此,它需要调用导航页面的另一种方法。

模态导航是在视图上捕获用户的绝佳选择。通常,这不是我们打算对用户执行的操作。但是,如果用户必须登录或需要用户同意(您确实确定...),请填写表格。然后,模态导航允许将用户保持在页面上,并通过自定义定义的逻辑处理导航。

注意: 模态导航起源于iOS。在Android和Windows下,用户具有系统按钮来导航应用程序。如果用户不能离开该页面并返回上一页,即用户必须先登录。开发人员将不得不覆盖 OnBackButtonPressed 在视图后面的代码中返回true。

导航TL; DR;

Xamarin 表格 中有两种导航方法。这些是推式和模态。每种都有不同的调用导航方式。这也适用于后退导航。

使用导航服务

通常,导航服务将必须包含导航页面以处理导航堆栈。此外,它需要提供一种通过推式或模式导航导航到页面并允许向后导航的方法。

初始化 现在可以在导航服务中完成 App.xaml.cs 通过使用相应的键注册所有视图。

在视图模型中,我们现在可以通过向服务提供目标页面的键来导航到页面。如果需要,我们还可以传递参数。由于参数是对象类型,因此那里没有限制。

正如之前所提 情态的 导航离开当前的导航堆栈,并独自显示页面。如果我们想通过推送到子页面从模态根页面导航。模态根页面必须位于导航页面本身中。这是导航服务自动执行的操作。它进一步删除了模态根页面的导航标题。

背部 导航检查当前页面打算使用哪种反向导航。导航堆栈中的根页面可以是应用程序的根页面,也可以是模式导航堆栈中的根页面。无论哪种情况,它将选择适当的后退导航方法。
如果该页面不是根页面,那么我们可以简单地导航回到上一个被推到导航堆栈中的页面。

结论

使用此博客文章中描述的导航服务。可以从视图模型导航到其他页面。这样做我们不会将依赖项添加到视图堆栈中,例如Xamarin形式。我们也不必一遍又一遍地为每个导航操作编写繁琐的回调方法。

我想要感谢 劳伦·布格尼翁(Laurent Bugnion) 在这一点上,他为使用MVVM Light的Xamarin Forms导航服务的最初实现奠定了上述导航服务的基础。

您可以在以下位置找到运行示例 的GitHub .

0条留言

NetStandardLogo

等待将很快结束,我们所有人都将能够使用.Net标准在.Net运行时之间共享所有代码。但是就目前而言,我们仍处于过渡状态,并非所有库都支持现成的.Net Standard。一种选择是现在依靠良好的旧便携式类库(PCL)。但是与.Net标准库相比,PCL具有许多限制。再加上.Net Standard,所有动作都将(并且将要)进行。因此,选择.Net Standard作为共享代码的库容器似乎毫无道理。

但是,当我们使用现成的不支持.Net标准的库时该怎么办?例如,假设我们要使用 反应式使用者介面 作为Xamarin.iOS和Xamarin.Android应用程序的MVVM框架。尝试通过以下方式添加Reactive UI版本7.4.0(撰写时的最新稳定版本) NuGet 到我们的.Net标准项目。我们收到以下错误消息:

错误消息指出.Net标准库不在此NuGet程序包的受支持.NET Framework之中

解决此问题的方法是在.Net标准项目中定义所需的目标。 反应式使用者介面 NuGet 包定义的目标。我们可以通过在Visual Studio中右键单击.Net标准库并选择 编辑项目名称 :

右键单击菜单,显示.Net标准项目的编辑选项

现在,我们可以通过添加 PackageTargetFallback 线到我们 网络标准 .Core.csproj 文件:

提供目标可为NuGet提供安装软件包所需的信息。再次运行NuGet安装会成功 Smile

更改项目后成功安装Reactive UI

结论

.Net Standard是编写可在多个.Net运行时环境上运行的.Net库的未来。

祝您编程愉快,不要让那些尚未移植的库阻止您实现目标!