根据子视图的内容大小调整滚动视图

Posted

技术标签:

【中文标题】根据子视图的内容大小调整滚动视图【英文标题】:Adjusting scroll view depending on content size of subview 【发布时间】:2015-07-11 16:02:33 【问题描述】:

我正在尝试允许滚动视图根据此页面上子视图的大小调整大小。图片中对象的所有其他约束都可以正常工作。

当我向我的子视图添加约束以拥抱屏幕的左侧、右侧和底部(并且子视图的顶部拥抱分段控件的底部)然后更新帧时,它会使子视图 0。

我无法为子视图添加高度约束,因为子视图的大小会根据其中的内容量动态变化,然后会改变滚动视图的大小。

如何在不添加高度限制的情况下完成此操作?

【问题讨论】:

【参考方案1】:

您的视图层次结构应如下所示:

创建 UIScrollView 的单个子视图,我们将在其中放置所有 我们的内容

内容视图必须是明确的大小(或占位符大小) 界面生成器并在运行时设置)。换句话说,您的内容 视图不能依赖滚动视图来获取其大小。它可以, 但是,取决于滚动视图之外的视图来获取其大小。

来自 Apple 技术说明 TN2154

在所有视图上将 translatesAutoresizingMaskIntoConstraints 设置为 NO 参与。

使用外部约束定位和调整滚动视图的大小 到滚动视图。

使用约束来布置子视图 滚动视图,确保约束绑定到所有四个边缘 滚动视图,不要依赖滚动视图来获取它们的大小。

UIScrollView And Autolayout

Using UIScrollView with Auto Layout in ios

【讨论】:

我很抱歉,但我对你的回答感到困惑。为什么我不能将子视图绑定到滚动视图的左右和底部,并将子视图的顶部绑定到分段控件的底部?我的层次结构也像你说的那样。滚动视图对视图的所有四个角都有约束。如果我将子视图的顶部绑定到滚动视图的顶部,子视图将根据屏幕大小移动所有内容 您能否分享您的视图层次结构以及滚动视图和内容视图的约束,基本上您需要的是 1)将视图 0 滚动到所有边缘 2)具有明确宽度和高度的内容视图(可能根据内容视图中的视图计算)如果您以正确的方式设置约束,自动布局可以自动计算内容大小 好的,我现在开始明白你在说什么了,但我想我只是不明白为什么 Xcode 会成功,所以我需要在滚动视图之上的另一个视图,看到滚动视图本身应该充当某种类型的内容容器。如何根据内容中的视图更改内容视图高度?【参考方案2】:

尝试将Equl HeightsEqual Width 约束赋予您的子视图。

【讨论】:

以上是关于根据子视图的内容大小调整滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何调整滚动视图内容的大小并根据其文本大小将文本视图放入其中? [复制]

Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小

调整滚动视图框架的大小时,UIScrollView 子视图的大小调整不正确

根据 contenView 大小以编程方式调整滚动视图的大小 [Swift]

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

Xamarin iOS:滚动视图中的自动布局?