带有嵌套图像的 UiScrollview 看起来很奇怪

Posted

技术标签:

【中文标题】带有嵌套图像的 UiScrollview 看起来很奇怪【英文标题】:UiScrollview with nested image looks weird 【发布时间】:2015-07-02 14:10:25 【问题描述】:

我在 UIViewController 中有一个 UIScrollView(由 ImageViewController 子类化)。 ViewController 本身是 NavigationController 堆栈的一部分。现在,除了有一个导航栏,我希望 ScrollView 占据屏幕上所有可用的空间。然后滚动视图内的 UIImageView 应该填充滚动视图的可用空间。您可以在此帖子的底部查看当前状态。

class ImageViewController: UIViewController, UIScrollViewDelegate 

    @IBOutlet weak var scrollView: UIScrollView!
    var imageView: UIImageView?
    var image: UIImage?

    override func viewDidLoad() 
        super.viewDidLoad()
        scrollView.delegate = self

        if let image = image 
            imageView = UIImageView(image: image)
            if let imageView = imageView 
                imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size)
                scrollView.addSubview(imageView)
                scrollView.contentSize = image.size

                let scaleHeight = scrollView.frame.size.height / scrollView.contentSize.height
                let scaleWidth = scrollView.frame.size.width / scrollView.contentSize.width
                let minimumScale:CGFloat = min(scaleHeight, scaleWidth)
                let maximumScale:CGFloat = max(scaleHeight, scaleWidth)

                scrollView.minimumZoomScale = minimumScale
                scrollView.maximumZoomScale = maximumScale
                scrollView.zoomScale = maximumScale
            
        
    

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? 
        return imageView
    

代码给我留下了不必要的边框(左、右、上)。我该如何摆脱它们?

编辑:在@Bxtr 的建议和another *** thread 的帮助下,我能够移除滚动视图的左右边框。经过一番挖掘,我发现通过停用Adjust Scroll View Insets,滚动视图内的图像可以正确垂直定位。不过,我一开始不明白垂直错位的原因......

【问题讨论】:

【参考方案1】:

您是否检查了边距/填充值,因为它看起来有点像(左右边框的大小相同)。如果不是这样,您能否也发布您的活动 xml 文件,以便我们可以帮助您解决难题的每个部分?

【讨论】:

你在左右边距上是对的!关于垂直问题,我刚刚更新了帖子(问题解决了,但我不明白为什么)。如果您有进一步的见解,我很乐意在这里介绍它们。 当我从 hollydays 回来时,我会做一些进一步的研究,但我很高兴我帮助了你!【参考方案2】:

scrollView.contentSize = image.size;

你必须调整这条线。您正在将滚动视图内容大小显式设置为图像大小。您必须设置内容大小以适应屏幕宽度。

【讨论】:

【参考方案3】:

您可以在 UIScrollView 中使用 UIView,并且该 UIView 包含 UIImage。 您需要正确设置约束。

【讨论】:

【参考方案4】:

经过一番挖掘后,我发现通过停用调整滚动 View Insets,滚动视图里面的图片可以正确 垂直定位。不过,我不明白垂直的原因 一开始就错位了……

原因是视图控制器的automaticAdjustsScrollViewInsets属性默认为YES,以下来自苹果文档:

自动调整ScrollViewInsets

一个布尔值,表示 视图控制器是否应该自动调整其滚动 查看插图。

默认值为YES,允许视图控制器调整它的 滚动视图插入以响应屏幕区域所消耗的 状态栏、导航栏和工具栏或标签栏。如果你设置为 NO 想要自己管理滚动视图插图调整,例如何时 视图层次结构中有多个滚动视图。

除了设置 automaticAdjustsScrollViewInsets = No,使用 autoLayout 时,您可以将 scrollView 固定到 topLayoutGuide(而不是 viewController 的视图顶部)。

【讨论】:

其实scrollView的Top Space已经固定到Top Layout Guide了。使用此设置和 automaticAdjustsScrollViewInsets = YES 会发生垂直错位。所以再一次:我很困惑为什么我必须将属性设置为 NO 才能获得所需的布局。

以上是关于带有嵌套图像的 UiScrollview 看起来很奇怪的主要内容,如果未能解决你的问题,请参考以下文章

带有背景图像的 UIScrollView

使用 UIScrollView 循环浏览图像

带有图像的 UIScrollView

将 UIImageView 对齐到 UIScrollView 的底部

带有检测触摸的图像视图的 UIScrollView

带有图像的 UIScrollView