如何滑动以查看维护导航栏项?

时间:2016-12-20 10:56:25

标签: ios swift

我正在尝试实现滑动以查看功能,就像推特的时刻一样:

enter image description here

如果你看一下顶部,你会看到一个带有视图的水平滑块。我的要求有点不同......在水平滑块的顶部,我需要我的常规导航栏和每个页面的自定义项目。

滑动查看我实现了一些小错误。请看一下这个视频(这是我到目前为止所做的):

http://sendvid.com/5j50p73z

正如您所看到的滑动视图功能正在运行但我仍然遗漏了一些重要的事情,即:

  1. 当滑动到下一个视图时,它会向上滚动(在视频中看到)
  2. 我的观点全部包含在导航控制器及其各自的导航栏项目中。我看到它的方式我需要像PushViewController这样没有后退按钮的东西但是这两个方向都有效......我有点迷失在这里如果我添加导航控制器而不是视图它显示了条形图,但低于现有的,不能代替它。
  3. 关于如何解决这些问题的任何想法?

    我正在开发使用Xamarin.iOS,但是如果你能提供一个使用swift的例子,我想我可以尝试翻译它:)

    这是我到目前为止所做的:

    var viewController = Storyboard.InstantiateViewController("detailClaimViewController") as DetailClaimViewController;
    
    viewController.ClaimId = ClaimId;
    AddChildViewController(viewController);
    ScrollView.AddSubview(viewController.View);
    viewController.DidMoveToParentViewController(this);
    
    var sumsInsController = Storyboard.InstantiateViewController("sumsInsuredListViewController") 
                                      as SumsInsuredListViewController;
    var sumsInsuredFrame = sumsInsController.View.Frame;
    
    sumsInsuredFrame.X = View.Frame.Size.Width;
    sumsInsController.View.Frame = sumsInsuredFrame;
    sumsInsController.ClaimId = ClaimId;
    sumsInsController.Title = $"Sums insured for {Title}";
    
    AddChildViewController(sumsInsController);
    ScrollView.AddSubview(sumsInsController.View);
    sumsInsController.DidMoveToParentViewController(this);
    
    
    ScrollView.ContentSize = new CGSize(View.Frame.Size.Width * 2, View.Frame.Size.Height - 49);
    

    这是我“需要”工作的代码,因为它加载了导航栏和ViewController的自定义导航栏项(正如我所说的那个“工作”但它显示了正确的导航栏下方标准的,它不能替代它):

    var viewController = Storyboard.InstantiateViewController("detailClaimViewController") as DetailClaimViewController;
    
    viewController.ClaimId = ClaimId;
    AddChildViewController(viewController);
    ScrollView.AddSubview(viewController.View);
    viewController.DidMoveToParentViewController(this);
    
    var navController = new UINavigationController();
    var sumsInsController = Storyboard.InstantiateViewController("sumsInsuredListViewController") 
                                      as SumsInsuredListViewController;
    var sumsInsuredFrame = sumsInsController.View.Frame;
    
    sumsInsuredFrame.X = View.Frame.Size.Width;
    sumsInsController.View.Frame = sumsInsuredFrame;
    
    sumsInsController.ClaimId = ClaimId;
    sumsInsController.Title = $"Sums insured for {Title}";
    navController.AddChildViewController(sumsInsController);
    
    AddChildViewController(navController);
    ScrollView.AddSubview(navController.View);
    navController.DidMoveToParentViewController(this);
    
    
    ScrollView.ContentSize = new CGSize(View.Frame.Size.Width * 2, View.Frame.Size.Height - 49);
    

    谢谢!

1 个答案:

答案 0 :(得分:1)

导航项是在UINavigationController内的每个包含的视图控制器中定义的。您可以通过不同的方式解决这个问题,但我的建议是使用自定义UIViewController作为您要呈现的其他UIViewController的容器。

例如,您可以构建一个包含自定义导航栏的自定义UIViewController和内容本身的视图,以充当自定义UINavigationController。使用自定义转换,您可以模仿原始类的行为。

有关容器视图控制器的更好说明,请参阅this document