在UIPageViewController中调整UIImageView的大小问题

我正在构build一个新的应用程序,并希望在开始时有一个“欢迎演练”,其中有一个包含UIPageViewController中呈现的一系列图像的故事板。 我有它加载图像和所有这一切都很好,但是图像的大小,每当他们超越了“先前”或“下一个”ViewController。 我正在使用Swift进行开发。

这是一个问题的video:http: //youtu.be/dXcjjT-8Bk0

我已经尝试了所有不同的视图模式(方面适合,方面填充,重绘等),他们都performance相同。

我正在使用Auto-Layout + Size Classes,因为我希望简化不同屏幕尺寸的开发。 目前的限制,使UIImage出现在正确的大小是:

 Align Centre X to Superview Top Space to Top Layout Guide Bottom Space to Bottom Layout Guide + Equals: 50 

我目前正在使用Aspect Fit ,它给了我正确的图像(在他们完成了“调整行为”之后)。

任何人都可以进一步指导我如何解决这个问题?

从你的video,我注意到你的UIImageView总是在顶部,而不是在底部“resize”。 这当然是因为你的自动布局约束,你称之为“Top Top to Top Layout Guide”。 当您的UIImageView的视图控制器正在通过滚动页面视图控制器进行转换时,它不知道顶部布局指南的位置,所以它的topLayoutGuide.length0 。 只有在animation完成后,视图控制器才会获得topLayoutGuide.length 。 是的,页面视图控制器应该比这更聪明一点,但事实并非如此。
您可以停止使用顶层布局指南,并相对于其顶层视图制作自动布局约束。 或者,您可以继续使用顶部布局指南,但在length0 。 你可以通过在你的ViewController中为你的故事板的NSLayoutConstraint和覆盖viewWillLayoutSubviews()包含你的UIImageView来做到这一点:

 @IBOutlet weak var topSpaceToTLG: NSLayoutConstraint! var parentTLGlength: CGFloat = 20 override func viewWillLayoutSubviews() { if self.topLayoutGuide.length == 0 { // Lengthen the autolayout constraint to where we know the // top layout guide will be when the transition completes topSpaceToTLG.constant = parentTLGlength } else { topSpaceToTLG.constant = 0 } } 

这将始终把你的UIImageView顶部的顶部布局指南,假设状态栏总是20点。 在布置子视图之前,它将检查顶部布局引导长度是否为0 ,并相应地调整您的自动布局约束。 过渡animation完成后,再次触发布局,顶部布局引导长度将是期望值,所以约束常量可以返回到0 。 甚至比硬编码更好的价值是在初始化期间传递父视图控制器的确切长度,考虑对顶部布局指南的任何可能的改变,例如添加导航栏。

从video,我认为你可以通过防止UIPageViewController扩展在顶部栏下解决这个问题。

在xcode中,您可以使用页面视图控制器的属性检查器,通过取消select“顶部条形下的延伸边线”来完成此操作。

这应该阻止它在状态栏下的分页,我认为有助于避免你看到的开关。

我发现我的问题是,当视图控制器开始animation顶部和底部布局指南没有高度。 左右边缘也没有。 当视图完成animation时,他们都收到一个高度或宽度,我的看法调整自己。 我通过在我的对象和超级视图之间添加垂直约束而不是“顶部/底部布局指南”来解决此问题。 我也不得不改变我的横向限制来忽略边缘。

我遇到的最后一个问题是我必须自己解释状态栏。 它可能会或可能不会在那里,或者可能是一个双重的酒吧,就像当你使用地图。