【问题标题】:UIPageViewController rotation weirdnessUIPageViewController 旋转怪异
【发布时间】:2013-05-02 12:17:07
【问题描述】:

我在我的应用中添加了一个 UIPageViewController 作为应用的手册。当用户弹出它时,它会显示一页纵向和两页横向,书脊在中间。由于我有大约 100 个页面,因此在其上方有一个兄弟视图 UICollectionView 页面选择器视图,以允许快速跳转到页面。 UIPageViewController 和 UICollectionView 都位于包含它们的后备视图上。

我在使用 UIPageViewController 时遇到的问题是,当视图第一次旋转时,它们似乎将自己限制在原始布局的短尺寸上。因此,如果它首先以纵向出现,那么当旋转到横向时,两个页面的宽度与旧的纵向宽度相同。同样,如果它首先以两页横向显示,则旋转到纵向具有正确的宽度,但高度是初始横向高度的高度。这在任何设备上都是一致的。

当我创建我的内容视图时,它们都是我想要的大小,但由于某种原因,它们似乎被 UIPageViewController 的某些组件转换了,我不明白为什么它只做两个维度之一以及为什么它始终是问题所在的“短边”。

这是让我感觉有点疯狂的问题之一,如果不是一些琐碎的错误配置,我有什么想法可以调试它吗?

【问题讨论】:

  • 我已经抽出一些时间来处理应用程序的其他部分,现在才回到这个问题上。重新审视我的内容的 loadView,大小设置一次。似乎 UIPageViewController 正在缓冲它接收的内容视图的第一个大小,并根据旋转按比例调整内容。这里还有一些我没有理解的奇怪的东西。每次更改内容时,我都会尝试暴力破解内容的大小,看看是否能解决主要问题。

标签: ios uipageviewcontroller


【解决方案1】:

经过长时间的调试,终于找到了。关键提示是在将纵向旋转为横向之前,将脊椎设置为视图宽度的正确中间值。解决方案是将视图的框架重置为在 willAnimateRotationToInterfaceOrientation 中给定方向的新大小。

我在调用动画块之前计算新大小,该动画块使用传递给方法的持续时间,然后在我拥有的块内:

  pageViewController.view.frame = newFrame;

当页面被旋转时,包含内容页面的视图被移动到正确的大小,并且脊椎被正确放置并且内容填充给定区域。我想我遇到了这个问题,因为视图的复杂性需要我接管这么多默认值,但是这个被搁置了。

【讨论】:

  • 你从哪里得到newFrame
  • 已经快三年了,我脑子里已经没有代码了,也找不到了。我相信它要么被传递给方法,要么我根据设备的大小计算它。我不会再这样做了,因为我们现在有自动布局和约束系统,可以让我们避免许多此类问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2012-12-25
相关资源
最近更新 更多