使用自动布局获取 uiscrollview 的高度

Posted

技术标签:

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

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

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

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

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

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

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

非常感谢

【问题讨论】:

【参考方案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

以上是关于使用自动布局获取 uiscrollview 的高度的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局向 UIScrollView 添加动态大小的视图(高度)

UIScrollView 动态高度内容(自动布局)没有填满整个空间

包含动态 TableView 高度的 UIScrollView 的自动布局

如何使用情节提要和自动布局在 UIScrollView 中添加动态高度/空间元素? [复制]

多行 UILabel 和 UIScrollview 使用自动布局

UIScrollView 不能使用自动布局和动态约束滚动