gpt4 book ai didi

ios - UIPageViewController 中的 UIImageView 大小调整问题

转载 作者:IT王子 更新时间:2023-10-29 05:19:20 24 4
gpt4 key购买 nike

我正在构建一个新的应用程序,并希望在开始时有一个“欢迎演练”,其中我有一个 Storyboard,其中包含在 UIPageViewController 中呈现的一系列图像。我让它加载图像并且所有这些都很好,但是只要图像超出“上一个”或“下一个”ViewController,就会调整图像的大小。我正在使用 Swift 进行开发。

这是问题的视频:http://youtu.be/dXcjjT-8Bk0

我已经尝试了所有不同的 View 模式(Aspect fit、aspect fill、redraw 等),它们的行为都一样。

我正在使用自动布局 + 尺寸类,因为我希望简化不同屏幕尺寸的开发。使 UIImage 以正确的大小显示的当前限制是:

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

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

谁能进一步指导我如何解决这个问题?

最佳答案

从您的视频中,我注意到您的 UIImageView 总是在顶部“调整大小”,而不是在底部。这肯定是因为您称之为“Top Space to Top Layout Guide”的自动布局约束。当您的 UIImageView 的 View Controller 正在通过您的滚动页面 View Controller 进行转换时,它不知道顶部布局指南在哪里,因此它的 topLayoutGuide.length0。只有在动画完成后, View Controller 才会为 topLayoutGuide.length 获取正值。是的,页面 View Controller 应该比这更聪明,但事实并非如此。
您可以停止使用顶部布局指南并相对于其父 View 的顶部进行自动布局约束。或者您可以继续使用顶部布局指南,但要考虑它的 length 何时为 0。您可以通过为 Storyboard的 NSLayoutConstraint 制作一个导出并在包含您的 UIImageViewViewController 中覆盖 viewWillLayoutSubviews() 来做到这一点>小号:

@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
}
}

假设状态栏始终为 20 点,这将始终将 UIImageView 的顶部放在顶部布局指南中。在布置 subview 之前,它会检查顶部布局指南长度是否为 0 并相应地调整您的自动布局约束。过渡动画完成后,再次触发布局,顶部布局引导长度将是预期值,因此约束常量可以回到0。比硬编码更好的方法是在初始化期间传入父 View Controller 的确切长度,考虑到顶部布局指南的任何可能更改,例如添加导航栏。

关于ios - UIPageViewController 中的 UIImageView 大小调整问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27793836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com