Ios 处理大小未知的UIView/UIScrollView(自动布局/Swift)

Ios 处理大小未知的UIView/UIScrollView(自动布局/Swift),ios,swift,uiscrollview,autolayout,Ios,Swift,Uiscrollview,Autolayout,我在我的应用程序中有一个这样结构的视图 UIViewController自身 UIView self.view UIScrollView滚动视图 UIView内容视图 UIView子视图A UIView子视图B UIView子视图C 在阅读了UIScrollView上的各种帖子之后,我现在有了一个看起来不错的UIScrollView,但实际上并没有滚动。我相信这是因为我的三个子视图subviewA、subviewB和subviewC都是用AutoLayout构建的 我的contentView的底

我在我的应用程序中有一个这样结构的视图

UIViewController自身 UIView self.view UIScrollView滚动视图 UIView内容视图 UIView子视图A UIView子视图B UIView子视图C 在阅读了UIScrollView上的各种帖子之后,我现在有了一个看起来不错的UIScrollView,但实际上并没有滚动。我相信这是因为我的三个子视图subviewA、subviewB和subviewC都是用AutoLayout构建的

我的contentView的底部约束为 contentView.bottomAnchor.constraintequalTo:scrollView.bottomAnchor.isActive=true

理想情况下,我希望contentView的底部锚点实际位于subviewC的底部,但由于subviewC是使用AutoLayout构建的,因此在添加到contentView时它没有定义的大小,因此scrollView实际上不会滚动

有人能告诉我为什么我的卷轴不能垂直滚动吗?看起来所有的子视图都被添加了,但是最下面的子视图离屏幕很远,实际上不允许我滚动

还有一点,比如我希望contentView有一个围绕subviewA、subviewB和subviewC的边框,但我觉得解决滚动问题可能会让我走上正确的道路。

滚动视图必须能够计算其内容的大小,所以是的,contentView的顶部约束应与subviewA的顶部匹配,contentView的底部应与subviewC的底部匹配。只要子视图的顶部和底部受到约束,所有子视图都使用约束就完全可以了

将contentView约束到其子视图后,将其所有4条边约束到scrollView的边。如果不希望它水平滚动,那么还可以将contentView的宽度限制为与scrollView的宽度相等


对于scrollview,使用0常量向其superview添加顶部、前导、尾随和底部约束

对于ContentView,使用0常量向其superview scrollview添加顶部、前导、尾随和底部约束。并为scrollview添加相等的宽度,然后为具有999优先级的scrollview添加相等的高度

现在为子视图A、子视图B、子视图C添加顶部、前导、尾部和底部约束


然后在subviewA、subviewB、subviewC视图的子视图中添加顶部、前导、尾随、底部和高度约束。

您的问题到底是什么?@mag_zbc已更新以清晰显示。特别是,即使添加了我的所有子视图,我的UIScrollView也不会垂直滚动。我怀疑这是因为子视图没有物理尺寸,因为它们都是使用autolayout构建的。autolayout完全可以用于滚动视图内容,只要它的方式是滚动视图可以精确计算其内容的高度。请看下面我的答案。subviewA、subviewB和subviewC中有什么?@RajeshKumarR-它们都是各种各样的组件;UILabels、UIViews、UIExtField等。它们确实在位置和大小方面定义了常量,但视图本身包括子视图A、子视图B、,subviewC没有定义大小。我正在努力理解如何将subviewC添加到contentView并将其固定到contentView的底部,而实际上我希望将contentView的底部固定到subviewC的底部。当subviewC是其子视图时,如何强制contentView的底部锚定为subviewC的底部?PS谢谢你的截图!子视图C不必有明确的高度约束;它可以是一个带有0行的UILabel,这意味着它可以有任意数量的行,这就是我在示例屏幕截图中看到的。当然,如果它是UIView或其他类型的没有自然高度的视图,它可以有一个显式的高度。当subviewC是它的子视图时,如何强制contentView的底部锚定为subviewC的底部?我不明白为什么这是一个问题,只需控制从subviewC到contentView的拖动,并选择底部约束。这不会使subviewC的底部约束等于contentView的底部约束吗?由于contentView是首先添加的,并且它的底部约束与scrollView相同,我想我很困惑为什么固定subviewC的底部会使contentView更高,这似乎就是为什么scroll视图不滚动的原因;如果我将子视图添加到contentView,contentView是否已经设置了约束?如何在不定义contentView约束的情况下将subviewA添加到contentView?