为啥我放置在滚动视图中的图像视图高度扭曲?

Posted

技术标签:

【中文标题】为啥我放置在滚动视图中的图像视图高度扭曲?【英文标题】:Why do my image views placed inside a scroll view have distorted heights?为什么我放置在滚动视图中的图像视图高度扭曲? 【发布时间】:2015-06-05 20:35:20 【问题描述】:

我有一个UIImageViews 数组,每个都有不同的图像和一个将它们放在UIScrollView 中的函数,因此它们可以像幻灯片一样自动滚动。我的滚动视图高度为 150 像素,图像为 400x150 PDF。

由于某些奇怪的原因,在 iPhone 5 模拟器上,我的图像垂直扭曲,而在 iPhone 6 和 6 Plus 上却完全正常。有没有人知道为什么会发生这种情况?

这是我的代码:

var pageViews: [UIImageView] = []
    @IBOutlet weak var carousel: UIScrollView!

    func showPage() 
        //Sets up the image views with their images inside the scroll view
        for (index, page) in enumerate(pageViews) 
            var frame = carousel.frame
            page.frame = CGRectMake(frame.size.width * CGFloat(index), 0, carousel.frame.width, page.image!.size.height)
            page.frame.origin.x = frame.size.width * CGFloat(index)
            page.contentMode = .ScaleToFill
            carousel.addSubview(page)
        
    

上面的函数在 viewDidAppear() 中被调用。我试过在 viewDidLoad() 和 viewDidLayoutSubviews() 中调用它,但没有区别。我还尝试将UIViewContentMode 更改为其他选项,例如.ScaleAspectFit,它修复了高度失真,但图像不再填充它们的图像视图,这让一切看起来都很奇怪。我尝试更改图像大小,但没有效果。最后我尝试了page.sizeToFit(),它把一切都搞砸了。我现在有点迷路了.. 救命?

【问题讨论】:

你确定它们在 6 和 6+ 上也没有失真吗?这些手机的宽度比 5 更接近 400,因此可能更难分辨。如果您将图像视图设置为.ScaleToFill,如果它们的纵横比与图像视图的纵横比不同,它将扭曲图像。您可以将其设置为ScaleAspectFill,它将保持纵横比并填满整个图像视图。这将导致图像的顶部/底部或左侧/右侧部分被截断。 【参考方案1】:

将图像视图clipToBounds 设置为true 并将UIViewContentMode 设置为.Center 解决了这个问题!这可能是一个临时解决方案,但目前效果很好。感谢您的帮助

【讨论】:

以上是关于为啥我放置在滚动视图中的图像视图高度扭曲?的主要内容,如果未能解决你的问题,请参考以下文章

为啥滚动时列表视图项目内的图像视图会消失?

UIView(放置在滚动视图内)在以编程方式更改高度常量时不显示其子视图

如何动态增加滚动视图中两个表格视图的高度

iOS:为啥我的子视图在滚动视图中出现大间距

滚动视图和图像视图

为啥有时滚动视图和子视图大小不一致