3

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

此外,MvxTouchFormFactor.Phone 是否默认以 4" iPhone 为目标,或者是否需要使用 MvxTouchFormFactor.TallPhone 明确定位它们?

4

1 回答 1

1

此功能的实现在:

外形尺寸本身定义为:

    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


我怀疑您在这里最简单的方法可能是编写自己的条件属性 - 这很容易做到 - 只需查看如何MvxFormFactorSpecificAttribute定义并将其用作您自己的属性的基础:

[AttributeUsage(AttributeTargets.Class)]
public class MyFormFactorSpecificAttribute
    : MvxConditionalConventionalAttribute
{
    public override bool IsConditionSatisfied
    {
        get
        {
            // put your logic here - could use Mvx.Resolve<IMvxTouchPlatformProperties>()
            return TODO;
        }
    }
}

如果您认为您的属性对其他用户有好处,我肯定愿意接受潜在的拉取请求,返回到 MvvmCross 以进行改进。


或者,您可以简单地将冲突视图标记为Unconventional,并可以在查看期间手动将它们添加到 View-ViewModel 查找中Setup


抱歉,这方面有些混乱。例如,我们已经将其标记MvxTouchPlatformProperties为过时,因为我们确实预期/希望这种功能将CrossCore在未来某个时候被功能取代。

于 2013-06-14T16:30:58.540 回答