Xamarin深坑集锦

  • 1 图片无法引用

问题现象:图片明明已经放入安卓及IOS的资源目录下,其他图片可以用,只有个别图片无法引用。

问题原因:有时直接复制进来的资源文件没有指定生成操作(偶然事件),导致程序编译时找不到目标文件。

解决方式:右键目标图片查看属性,安卓文件则在“生成操作”栏目选择“AndroidResource”,IOS则选择“BundleResource”,然后重新生成解决方案。(有时重新生成解决方案后仍不能选择,需要重新打开项目尝试)

 

  •  2 Tab子页数据不显示

问题现象Tab页中只有第一个页面显示正常,后面的页面不显示绑定的数据信息。

问题原因:数据初始化操作在重写的方法OnNavigatedTo中执行,由于只有第一个Tab页执行了OnNavigatedTo方法,所以只有Tab页中的第一个正常显示绑定的数据信息。

解决方式:将方法转移至构造方法(函数)中执行。


  • 3 页面跳转不显示头部导航栏

问题现象:页面跳转时,没有头部导航栏信息,直接显示页面内容。如下图所示:

 

问题原因:没有在NavigationPage的导航关系下。

解决方式:在页面跳转时,添加NavigationPage/” ,如下图


 

  •  4 子页面不显示返回按钮

问题现象:页面跳转时,子页面头部不显示返回按钮。如下图所示: 

问题原因:父页面不在NavigationPage的导航关系下。

解决方式:在跳转至父页面的地方添加NavigationPage/,此处在“App.xaml.cs”文件中添加,如下图:


  • 5 页面显示两级头部导航栏

问题现象:页面显示两级头部导航栏,如下图所示: 


问题原因

A、父页面已经在NavigationPage关系下,父页面跳转至子页面时又添加了“NavigationPage/”关系。

B、子页面本身需要显示NavigationBar(例如Tab页,底部导航切换页),会导致两级头部导航栏。

解决方式

针对A:如果当前父页面已经在NavigationPage关系下,则在子页面跳转时,不要添加“NavigationPage/”。

针对B:以方式一的样式跳转,关键参数“useModalNavigation”为true。(方式二跳转后子页面会有导航栏)

  •  6 隐藏状态栏/头部导航栏

问题现象:由于登录页存在类似“忘记密码”“用户注册”等页面跳转操作,为了让子页面显示时有头部导航标题及返回按钮(图标),所以在跳转至登录页的地方添加NavigationPage/”,导致登录页头部出现导航栏,实际登录页并不需要显示导航栏。

问题原因:跳转至登录页的地方添加了NavigationPage/”。

解决方式:到登录页的.xaml.cs文件下添加下方代码,用于隐藏头部导航栏。

NavigationPage.SetHasNavigationBar(this, false);

 

  • 7 使用UserDialogs框架提示空指针

问题现象:在项目共有文件程序中调用UserDialogs.Instance.XXX提示空指针。且类型定义中只有一个方法。 

问题原因:UserDialogs未实例化。

解决方式:在不同版本(安卓、IOS等)程序的活动中进行实例化操作。下图以安卓为例:

 


  •  8 调用Picker不显示数据内容

问题现象:数据集合已经成功获取,并且数据绑定无误,但是实际运行时,不显示数据列表。

问题原因:定义的数据集合为List 、IList时,控件Picker不识别。

解决方式:将数据集合类型定义为ObservableCollection。

 

  • 根据状态动态显示标签内容

     根据具体的值,动态显示内容,类似多分支选择语句,以下以Label标签的IsEnabled属性作为判断条件,(也可用Label标签的Text属性判断,具体依情况而定)

<Label Text="" IsEnabled="{Binding IsPaid}" Style="{StaticResource LabelDefault}">

<Label.Triggers>
<Trigger TargetType="Label" Property="IsEnabled" Value="True">
<Setter Property="TextColor" Value="Green" />
<Setter Property="Text" Value="已付" />
</Trigger>
<Trigger TargetType="Label" Property="IsEnabled" Value="False">
<Setter Property="TextColor" Value="Red" />
<Setter Property="Text" Value="未付" />
</Trigger>
</Label.Triggers>

</Label>

 

  • 10 头部导航栏(标题栏)不显示标题

问题现象:在Tab切换页面时,头部导航栏只有背景色,没有标题,且已经确认给每个子页面指定了Title,并在.xaml布局中添加了标题绑定。

问题原因:未显示标题的头部导航栏可能是属于父布局的NavigationBar,所以在子页面指定标题无效。

解决方式:在Tab的.xaml.cs文件中重写OnCurrentPageChanged()方法,并添加以下语句,让标题显示为当前子页面的标题。(此处Tabpage页继承的是BottomBarPage

Title = CurrentPage?.Title;

 

  • 11 页面跳转至登录页

   问题现象:应用跳转至登录页后,再次登录,并重复以上步骤二至三次,点击系统返回键返回,会返回出多个登录页。

   问题原因:从应用跳转至返回页时,用以下代码跳转:,这种方式跳转逻辑如下:

   解决方式:页面跳转时,跳转路径前加上斜杠,

           如 await NavigationService.NavigateAsync("/NavigationPage/LoginPage", null, true);


  • 12 网络请求接收JSON数据不成功

   问题现象:网络请求接口返回数据正常,用JObject接收数据时为空。或者用Model接收失败。

   问题原因:

   解决方式:a、尽量使用Model模型来接收数据,且在模型定义中不能出现“virtual”关键字: 

            

                    b、接口不能直接初始化实例:

    


  •  13 列表数据不指定行高数据显示不完整

问题现象:当不给ListView指定行高时,Item信息显示不完整,但是行高不确定是多少。 

问题原因:未指定HasUnevenRows字段为true。这个字段能够让Item行高自适应内容的高度。

解决方式:在布局中给ListView添加“HasUnevenRows属性为True。


  • 14 获取中文首字母异常

问题现象:获取中文首字母时,抛出如下异常信息:

 

问题原因未集成中文包(IOS一般不会有这个问题)。

解决方式右键安卓项目,选择“属性”按钮,在“Android选项”栏目中选择“CJK”即可。

 

  •  15 页面跳转传递参数异常

问题现象:当页面之间通过NavigationParameters 进行参数传递时,参数解析失败。

问题原因:参数过大,通常是直接将一个完整对象传递到另一个页面作为参数会导致次问题。

解决方式:借助临时变量,去除参数中不必要的冗余字段值即可。




附注:以上问题均为本人开发过程中遇到的一些问题,在此整理以供大家参考。问题原因及解决方式纯属个人意见,若有不当之处还望多多指出,不胜感谢!

猜你喜欢

转载自blog.csdn.net/m0_37698386/article/details/79866141