摘要
我希望为iOS和Android提供单一的MvvmCross解决方案,实现FlyoutNavigation /汉堡菜单/滑动菜单进行导航。
示例代码
https://github.com/benhysell/V.FlyoutTest
问题
Android项目没有问题,iOS项目正在采用视图并将帧大小加倍。我不确定它是否是因为我在iOS上使用FlyoutNavigation
组件的方式,或者我在MvvmCross中使用FlyoutNavigation
所做的事情。我没有运气就习惯使用自定义ViewPresenters。
详细问题说明
我已经看到了为MvvmCross实施FlyoutNavigation /汉堡菜单/滑动菜单的几种解决方案,但没有一种实现能够在统一解决方案中同时解决Android和iOS问题。每种方法都有自己的Core项目,然后是他们自己的想法,在哪里放置菜单数据,管理视图等。
因此,我开始创建一个统一的架构。
有关iOS和Android项目的单一解决方案的工作演示,请参阅https://github.com/benhysell/V.FlyoutTest,这两个项目都实现了FlyoutNavigation /汉堡菜单/滑动菜单。
我为Android项目找到并关注了http://motzcod.es/post/60427389481/effective-navigation-in-xamarin-android-part-1,来源:https://github.com/jamesmontemagno/Xam.NavDrawer,效果很好。 Android项目使用原生导航抽屉,片段和交换Views
很好地进出。
在使用此架构的解决方案中,我有三个主要ViewModel
s ... HomeViewModel
,EnterTimeViewModel
和CreateNewJobViewModel
。 HomeViewModel
保存滑动菜单数据,另外两个提供用户将与之交互的视图。在我的示例中,我创建了一个小时输入应用程序,因此用户可以输入作业时间或创建新作业。
要在iOS中使用我的ViewModel
,我决定使用FlyoutNavigation
组件https://github.com/Clancey/FlyoutNavigation。我试图使用http://slodge.blogspot.com/2013/07/awesome-sliding-menus-from-big-frank.html中描述的链接/项目,但没有成功使用已经建立的Android项目依赖的.Core项目来增强它们的实现。
我能够快速实现iOS FlyoutNavigation
中的HomeView
组件,我认为我是自由而明确的,但Views
本身的大小是他们的2倍装置。在屏幕截图中,输入时间'并创造新工作'应该像MvvmCross中的任何其他标题一样居中,但是偏向右侧。查看'输入时间'的三个屏幕截图。查看,菜单打开,并创建新工作'视图。 ::我使用了“暂停”按钮来快速,肮脏'汉堡包' ::
感觉我错过了一些简单的东西/我需要为iOS实现自定义ViewPresenter
,但我尝试关注其他人并未成功。关于我应该采取的方向的想法/我应该尝试的事情?
答案 0 :(得分:1)
我不宣称这是Android和iOS菜单最干净的解决方案......但这是一个开始。
要解决我的调整大小问题,我更改了FlyoutNavigation
中将View.Frame
View.Bounds
和ViewWillAppear
设置为HomeView
的位置。
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
navigation.View.Frame = UIScreen.MainScreen.Bounds;
navigation.View.Bounds = UIScreen.MainScreen.Bounds;
}
更新的代码发布到github https://github.com/benhysell/V.FlyoutTest
答案 1 :(得分:0)
我认为问题在于您将FlyoutNavigationController
置于ViewController
内,而NavigationController
本身已在FlyoutNavigationController
内。
我的猜测是因为FlyoutNavigationController
可能会获得更大的宽度。
查看来源 - https://github.com/Clancey/FlyoutNavigation/blob/master/FlyoutNavigation/FlyoutNavigationController.cs#L248 - 看起来View.Bounds.Width
使用Bounds
来布局它的子视图 - 所以如果你有可能让当前代码正常工作调整弹出框Frame
以及{{1}}。
总的来说,我建议您查看像Frank这样的机制 - http://slodge.blogspot.com/2013/07/awesome-sliding-menus-from-big-frank.html - 或者像回归基础https://github.com/sequence/MonoTouch.SlidingControls一样(不确定目前是否构建) 。我发现使用这些并且使用自定义演示器对我来说效果很好。
最后一件事......干得好 - 我喜欢在Droid和iOS上看到统一的样本:)