【问题标题】:get height of an uiscrollview with autolayout使用自动布局获取 uiscrollview 的高度
【发布时间】:2014-08-27 18:30:33
【问题描述】:

我已经用纯自动布局构建了一个 uiscrollview,所以我不使用:

[scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];

问题是现在我需要获取 uiScrollView 的 contentSize.height,但是使用 autoloayout 我得到的是 0。

当用户双击时,我需要获取 contentSize.height 以放大滚动视图。

我想使用的代码是这个: ZoomToPoint

你能帮我在 autoLayout 中使用这段代码吗?

非常感谢

【问题讨论】:

    标签: ios uiscrollview swift autolayout xcode6-beta6


    【解决方案1】:

    我没有足够的信息来了解您为什么得到 0,这似乎没有发生在我目前正在开发的应用程序中的任何一个滚动视图上。也许您的自动布局约束不太正确? Autolayout + UIScrollViews 不是一个非常简单的组合。我发现将所有视图放置在一个普通的 UIView“容器”中并将 放置在滚动视图中是最简单的方法。

    但是你真的需要 contentSize.height 吗?对我来说,在缩小的双击时将比例加倍并在放大的双击时缩小到 100% 是有意义的:

    func doubleTapReceived(recognizer: UITapGestureRecognizer) {
        if recognizer.state == .Ended {
            if photo.scrollView.zoomScale == 1.0 {
                let point = recognizer.locationOfTouch(0, inView: <one of your views>)
                <your scroll view>.zoomToPoint(point, withScale: 2.0, animated: true)
            } else {
                <your scroll view>.zoomToRect(photo.frame, animated: true)
            }
        }
    }
    

    不需要子类化。

    Here's 我的代码的类似部分。也许尝试克隆我的项目并构建它,看看它与你所拥有的有什么不同?您可以通过转到“照片”选项卡并点击收藏视图中的缩略图之一来访问该特定滚动视图。

    【讨论】:

    • 在您的代码中,在第 17 行的 zoomToPoint 方法中,您有:height = (self.contentSize.height / self.zoomScale) 在我的情况下,此行始终为 0。
    • 我唯一的猜测是您的自动布局约束设置不正确。 This 是一个关于如何使用中间容器视图的好教程,但我不完全确定这是否能解决您的问题。
    【解决方案2】:

    如果您是子类化UIScrollView,则应在UIScrollView 子类中使用layoutSubviews 方法,否则您可以在UIViewController 中使用viewDidLayoutSubviews 方法来找到滚动视图的正确contentSize

    【讨论】:

    • 你好,我已经尝试覆盖 func viewDidLayoutSubviews() { println("viewDidLayoutSubviews scroll view: (maScrollView.contentSize.height)") } 但结果仍然是 viewDidLayoutSubviews scroll view: 0.0
    猜你喜欢
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多