【问题标题】:UiScrollview with nested image looks weird带有嵌套图像的 UiScrollview 看起来很奇怪
【发布时间】: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 stackoverflow thread 的帮助下,我能够移除滚动视图的左右边框。经过一番挖掘,我发现通过停用Adjust Scroll View Insets,滚动视图内的图像可以正确垂直定位。不过,我一开始不明白垂直错位的原因......

【问题讨论】:

    标签: uiscrollview uiimageview border dimensions


    【解决方案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 才能获得所需的布局。
        猜你喜欢
        • 2021-03-25
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 2018-11-11
        • 2014-08-23
        • 2015-03-20
        • 2011-07-19
        相关资源
        最近更新 更多