【问题标题】:Paging scroll view with child view controllers带有子视图控制器的分页滚动视图
【发布时间】:2012-04-02 11:29:01
【问题描述】:

使用分页实现水平滚动视图的最佳做法是什么,每页一个视图控制器?

既然 iOS5 具有用于视图控制器容器/容器的 API,PageControl 示例仍然是实现此功能的最佳方式吗?

【问题讨论】:

  • 你现在使用什么方法?我使用苹果 PageControl 示例中显示的方法。它可以工作,但仍有一些情况会出现错误:Rotation releated,可能是因为 ScrollView 不是 ViewController。
  • 我使用了 UIPageViewController 和 UIPageViewControllerTransitionStyleScroll,我遇到了很多边缘情况,在滚动视图的开头和结尾添加了新的视图控制器,这使得它比 PageControl 类型的方法更容易实现。

标签: ios scrollview


【解决方案1】:

我知道这个问题有点老了,但是从 iOS 6 开始,UIPageViewController 有一个名为 UIPageViewControllerTransitionStyleScroll 的新转换样式属性,它可以让您将页面控制器用于像您这样的用例,只需在页面之间滚动而不是iBooks 风格的页面卷曲过渡。

您还应该观看 2012 年 WWDC 视频编号 223 - Enhancing User Experience with Scroll Views,他们基本上将使用您描述的方法的旧应用转换为具有滚动样式转换的新 UIPageViewController。

【讨论】:

    【解决方案2】:

    我的回答是,这取决于你的目标。如果您想尽可能高效地制作应用程序,我会使用示例代码中的方式。我以前用过,我会再做一次。

    另一方面,如果您的目标是了解视图控制器包含、它是如何工作的以及如何使用它,那么这可能是一个很好的尝试案例。如果您这样做,请不要忘记查看 WWDC 视频“实现 UIViewController Containment”(https://developer.apple.com/videos/wwdc/2011/)。

    【讨论】:

    • 感谢我观看了 WWDC 视频,它不是 Apple 最好的视频之一,非常令人困惑。该视频在管理屏幕不同部分的上下文中讨论了 UIViewController 包含,这与滚动视图不同。页面控件示例的问题在于它已过时。没有故事板等。
    【解决方案3】:

    从 iOS5 开始,最佳实践似乎是继续使用与 PageControl 示例相同的方法。那是一个控制器类(注意不是视图控制器)。每个页面都有子视图控制器。

    到目前为止,还没有记录在案的更好的方法来使用 iOS5 中包含的视图控制器包含方法来实现分页滚动视图。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 感谢您的回复。 UIPageViewController 不支持没有我需要的翻页动画的水平分页。
      【解决方案5】:

      我觉得 UIPageViewController 可以横着走:

      - (id)initWithTransitionStyle:(UIPageViewControllerTransitionStyle)style navigationOrientation:(UIPageViewControllerNavigationOrientation)navigationOrientation options:(NSDictionary *)options
      

      enum {
          UIPageViewControllerNavigationOrientationHorizontal = 0,
          UIPageViewControllerNavigationOrientationVertical = 1
      };
      typedef NSInteger UIPageViewControllerNavigationOrientation;
      

      http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/UIPageViewControllerClassReference.html

      【讨论】:

      • 感谢您的回复。 UIPageViewController 仅支持在页面之间移动时翻页。我正在寻找在多个页面之间水平滚动的最佳方式。与 pagecontrol 示例一样,每个视图控制器一页
      【解决方案6】:

      如果您将视图控制器视图 (myViewControllerOne.view) 添加到 UIScrollView - 然后适当地将它们设置为水平显示 - 当用户与视图控制器中的滚动视图方法内的该视图交互时,将被调用。

      我的意思是,如果您将 MyViewControllerOne.view 作为滚动视图内的子视图,当您滚动到滚动视图的“页面”并按下按钮时,MyViewControllerOne 中的附加方法(IBAction 等)将是叫。

      这应该为您提供您需要的所有功能,例如添加 UI 元素、表格、另一个滚动视图等。这些元素将由它们的原始视图控制器控制。

      希望这会有所帮助!

      【讨论】:

      • 谢谢 RachelD 这就是我所做的。问题更多的是关于什么是最佳实践。请注意,将一个视图控制器视图添加到另一个视图层次结构可能会出现问题。见blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers
      • 这不是正确的方法,你不应该这样做!
      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多