在自动布局的情况下,IOS scrollview 模糊的可滚动内容高度

Posted

技术标签:

【中文标题】在自动布局的情况下,IOS scrollview 模糊的可滚动内容高度【英文标题】:IOS scrollview ambiguous scrollable content height in case of autolayout 【发布时间】:2015-02-02 06:55:00 【问题描述】:

您好,我正在开发小型 ios 应用程序,其中我使用带有自动布局的滚动视图。内部滚动我正在添加另外两个视图。我正在使用 IB 和自动布局约束。我以垂直方式一个接一个地添加两个视图。我添加了外部约束,例如尾随、前导、顶部、底部空间。我还为两个视图添加了高度限制。到此为止一切正常。

但我的 view1 有一些动态内容。出于这个原因,我想让高度约束大于等于而不是等于。

那么如何解决这个问题。需要一些帮助。谢谢。

【问题讨论】:

【参考方案1】:

您应该遵循以下方法。 首先,这里有一些关于滚动视图的重要事项,它们对于自动布局很重要:

    UIScrollView 会自动更改其边界。 UIScrollView 需要一个内容视图(在 UI 中)来获取滚动的内容大小,这对于自动布局非常有效。 UIScrollView 的顶部和底部约束应连接到顶部和底部布局指南(对于大多数情况,不是全部)。

根据你的问题:

第一种方法:您有UIScrollView,因此只需在其中插入一个UIView 并将其视为内容视图。之后将您的两个 UIViews 放入 UIView(内容视图)中。

所以层次结构是:MainView --> UIScollView --> UIView (ContentView) --> firstView & Second View。现在我们要对它们都施加约束。

对于 UIScrollView,将 TOP 和 BOTTOM 约束连接到 TOP & Bottom Layout Guide,并将 LEADING 和 TRAILING 连接到主视图。 对于UIView(内容视图),为 UIScrollView 提供约束 LEADING、TRAILING、TOP、BOTTOM 并为您的 contentView 提供适合滚动的显式高度(正常高度约束)非常重要(例如 1200 )。还要让它在容器中水平居中。 现在为您的第一个视图指定约束:LEADING、TRAILING、TOP 到 ContentView 并指定显式高度(正常高度约束)。现在不要尝试将其修改为大于等于 - 我们稍后会这样做。然后,对第二个视图前导、对 ContentView 的尾随、对 FirstView 的顶部、对内容视图的底部和显式高度(无论你想要什么)进行约束。现在,尝试将第一个视图的高度约束从等于 -> 大于等于 - 它肯定会起作用。

第二种方法(简单易行):根据第一点给出约束后,为了动态更改第一个视图的高度,您可以为您的类创建第一个视图的高度约束的 IBOutlet,并根据您的要求更改约束的任何方法或按钮操作中的常量值(根据您想要的第一个视图的高度),因此它将在运行时发生变化。当你想隐藏你的视图时,你也可以认为这是一个很好的技巧,所以只需将它们的高度约束的常量更改为 0,这样它就会隐藏,并且在取消隐藏时,再次将相同的常量值设置为所需的值,这样你也可以轻松使用视图的隐藏和取消隐藏功能,这在其他方式的自动布局中有点困难。

【讨论】:

【参考方案2】:

我会将这个约束设置为equals 类型并赋予它低优先级。然后,在添加动态内容的过程中,您可以只添加另一个具有更高优先级的约束。

如果您从 xib 加载此 UIView,请确保您提供具有更高优先级的约束。

【讨论】:

以上是关于在自动布局的情况下,IOS scrollview 模糊的可滚动内容高度的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 6 上使用自动布局在 ScrollView 中嵌入 ImageView

Swift - 如何对 ScrollView 中的项目使用自动布局?

在 Swift 中使用 ScrollView 进行自动布局

在 iOS 8 中如何在不使用自动布局的情况下布局 UITableViewCell?

在 iOS 中使用自动布局填充 UIScrollView 的内容

Masonry复杂ScrollView布局