Xamarin.ios MvvmCross MvxFormFactorSpecific iPad/iPhone属性

Xamarin.ios MvvmCross MvxFormFactorSpecific iPad/iPhone属性,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我有iPhone和iPad特定的视图控制器,它们分别具有MvxFormFactorSpecific(MvxTouchFormFactor.Phone)和MvxFormFactorSpecific(MvxTouchFormFactor.Pad)属性。当应用程序在iPad上运行时,会找到并实例化正确的视图。然而,当应用程序在4英寸的iPhone上运行时,它会抛出一个异常,说“找不到…的视图”。那么这是一个bug还是我做错了什么 另外,MvxTouchFormFactor.Phone是否默认以4英寸i

我有iPhone和iPad特定的视图控制器,它们分别具有MvxFormFactorSpecific(MvxTouchFormFactor.Phone)和MvxFormFactorSpecific(MvxTouchFormFactor.Pad)属性。当应用程序在iPad上运行时,会找到并实例化正确的视图。然而,当应用程序在4英寸的iPhone上运行时,它会抛出一个异常,说“找不到…的视图”。那么这是一个bug还是我做错了什么


另外,MvxTouchFormFactor.Phone是否默认以4英寸iPhone为目标,还是需要使用MvxTouchFormFactor.TallPhone明确以4英寸iPhone为目标?

此功能的实现包括:

形状系数本身定义为:

    public MvxTouchFormFactor FormFactor
    {
        get
        {
            switch (UIDevice.CurrentDevice.UserInterfaceIdiom)
            {
                case UIUserInterfaceIdiom.Phone:
                    if (UIScreen.MainScreen.Bounds.Height*UIScreen.MainScreen.Scale >= 1136)
                        return MvxTouchFormFactor.TallPhone;

                    return MvxTouchFormFactor.Phone;

                case UIUserInterfaceIdiom.Pad:
                    return MvxTouchFormFactor.Pad;

                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }
因此-您可以看到,
Phone
TallPhone


我想,在这里最简单的方法可能是编写自己的条件属性-这非常容易-只需看看
mvxformfactorspecificatAttribute
是如何定义的,并将其用作自己属性的基础:

[AttributeUsage(AttributeTargets.Class)]
public class MyFormFactorSpecificAttribute
    : MvxConditionalConventionalAttribute
{
    public override bool IsConditionSatisfied
    {
        get
        {
            // put your logic here - could use Mvx.Resolve<IMvxTouchPlatformProperties>()
            return TODO;
        }
    }
}
[AttributeUsage(AttributeTargets.Class)]
公共类MyFormFactorSpecificCatAttribute
:MvxConditionalConventionalAttribute
{
满足公共覆盖布尔条件
{
得到
{
//将逻辑放在这里-可以使用Mvx.Resolve()
返回待办事项;
}
}
}
如果您认为您的属性对其他用户有好处,我肯定会欢迎潜在的请求返回MvvmCross进行改进


或者,您可以简单地将冲突视图标记为
非常规
,并在
设置过程中手动将它们添加到视图模型查找中


对不起,这方面有些混乱。e、 g.我们已经将
MvxTouchPlatformProperties
标记为过时,因为我们预计/希望这种功能在将来某个时候会被
CrossCore
功能取代