让 2 个不同的 UIView 确定 UIScrollView 的 contentView 的高度

Posted

技术标签:

【中文标题】让 2 个不同的 UIView 确定 UIScrollView 的 contentView 的高度【英文标题】:Have 2 different UIViews determine the height of the contentView of a UIScrollView 【发布时间】:2017-04-21 11:51:50 【问题描述】:

是否可以将 2 个不同的 UIViews 连接到 UIScrollView 的底部 ContentView 并通过单击按钮切换它们?

我现在拥有的视图层次结构 -

UIScrollView
   ContentView
     UIView1
     UIView2

我真正希望实现的是将UIView1UIView2 都连接到 ContentView 的底部,并以编程方式在这两种情况之间切换。

我尝试将 2 个约束之一设为可选,然后根据我的情况切换优先级,但它说我无法将已加载视图的优先级从可选更改为必需(反之亦然)。

【问题讨论】:

是的,你可以。首先,你不能在约束的帮助下改变滚动contentSize。约束基本上旨在计算任何视图的框架,而不是内容大小。您必须提供滚动视图的内容大小。系统不会自动计算。根据您的 2 个视图调整 scrollView 的内容大小。您可以更改滚动视图contentOffset 使用或不使用动画以从一个偏移量滚动到另一个偏移量。 这里有些混乱... 第一,绝对可以使用约束来控制滚动视图的 contentSize。第二,你问的不是很清楚:你想在显示一个视图和隐藏另一个视图之间切换吗?或者你想交换他们的位置? @DonMag 我希望在 2 个不同 UIView 的高度之间切换 UIScrollView 的 contentSize 好的,那么是的,你走在了正确的轨道上。将UIView1UIView2 都连接到ContentView 的底部,并为约束创建@IBOutlets。正如@Saurav 在他的回答中所说,给然后优先级除了 1000。因此,如果您想从 View1 控制大小开始,那么(例如)将 V1 设置为 999 并将 V2 设置为 998。当需要,只需交换值 - 将 V1 设置为 998,将 V2 设置为 999。 【参考方案1】:

您不能将已加载视图的优先级从可选更改为必需。但是您绝对可以在相同范围内增加优先级。示例-priority1 = 750 ,priority2 = 760

【讨论】:

以上是关于让 2 个不同的 UIView 确定 UIScrollView 的 contentView 的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIImage 中放置一个按钮来确定不同的选择?

iOS 开发小记

UIVIew:有没有办法让多个标签来检索超级视图?

你如何使 UIView 的幻灯片从左到右并在 iPhone 中相互对接?

如何让 UIView 忽略触摸而不释放它?

如何为uiview的不同部分添加多个UITapGestureRecognizer?