在将约束应用于 UIScrollView 时需要帮助

Posted

技术标签:

【中文标题】在将约束应用于 UIScrollView 时需要帮助【英文标题】:Need Help in applying constraints to UIScrollView 【发布时间】:2017-01-31 07:11:28 【问题描述】:

我正在以编程方式添加子视图。 要求:添加额外视图时应启用滚动。 我应用的约束:

为了删除顶部的多余空格,我写了self.automaticallyAdjustsScrollViewInsets = false 还将内容大小设为self.scrollView.contentSize = CGSize(width: self.contentView.frame.width, height: self.contentView.frame.height*2)

但是当视图被加载时滚动被完全禁用。

请帮帮我

【问题讨论】:

打印出来的 contentSize 是多少? 打印出来的时候显示为(375.0,1334.0) 您是否在 IB 中检查过反弹和垂直反弹?并且还启用了滚动 在 viewWillLayoutSubviews 中设置内容大小 @jo3birdtalk ,这些都经过检查。他们只是弹跳而不是向上滚动。 【参考方案1】:

当你使用自动布局时,你必须在viewcontroller方法中设置content size,你必须override下面的方法。

-(void)viewWillLayoutSubviews;

迅速

override func viewWillLayoutSubviews() 

    

【讨论】:

【参考方案2】:

尝试根据滚动内容视图底部子视图的(origin.y + 高度)设置内容视图高度。

【讨论】:

我很欣赏这个想法。我在哪里设置它? 在 contentview 中以编程方式添加子视图后。 当我使用自动布局时,明确分配高度是一种好习惯。而且它也不起作用。 当您以编程方式添加子视图时,您必须根据其中所有子视图的高度来更改内容视图的高度。因此,您可以使用自动布局以编程方式分配高度。【参考方案3】:

您需要做的事情很少,请检查您是否已启用此功能。

    反弹 垂直弹跳 启用滚动

如果启用这些仍然无法帮助滚动,请添加 ContentView 的高度约束。您必须将此约束作为IBOutlet 连接到您的视图控制器。

我相信您的数据是从服务器获取的,因此您的内容高度不明确。因此,在您打印问题中值(375.0,1334.0)contentSize 的位置,添加这行代码,之后您应该能够滚动。

YourHeightConstraint.constant = self.scrollView.contentSize.height

【讨论】:

以上是关于在将约束应用于 UIScrollView 时需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 UIScrollView 中放置视图时需要 6 个约束?

UIScrollView 和约束的问题

斯威夫特:我无法使自动布局约束适用于我的 UIScrollView

如何以编程方式增加具有约束的 UIScrollView 的高度?

如何在UIScrollView的xib上添加子控件并添加AutoLayout约束

UIScrollView 的行为是不是因全屏而异?