2

我真的很讨厌在这里问,因为我通常会尝试自己解决问题。但是在这个问题上,我已经坚持了好几天,在网上的任何地方都找不到解决方案。

我有一个包含多个子视图的 ScrollView。我在顶部有一个图像视图和两个固定高度的标签。然后是一个 UITextView 和另一个 ImageView(见图片)。

我以编程方式将文本添加到文本视图中,因此它应该具有动态高度,并且 ImageView 应该移动到底部以便您可以滚动。我不希望 TextView 本身可以滚动,但我希望所有子视图也可以移动。

我知道我应该能够使用约束来解决这个问题。但我觉得我已经尝试了一切,但没有任何效果。当我禁用自动布局并手动移动视图时,它起作用了。我想知道是否有更好的方法。

在此处输入图像描述

如您所见,我将 TextView 以 1,000 的优先级固定到上面的 ImageView 上,并以 1,000 的优先级固定到下面的 ImageView 上。高度约束无法删除,因此我将其设置为可能的最低优先级。底部的 ImageView 以绝对高度固定到 superview 的底部。它的高度约束也具有低优先级。(如果有帮助,我可以发布 ImageView 约束的图像)我还尝试以编程方式调整框架,但这与自动布局结合使用效果不佳。(如果有帮助,我当然可以发布代码)

我究竟做错了什么?我应该禁用自动布局并手动执行吗?这对我来说似乎不干净。甚至有可能做到吗?

我真的很感谢你的帮助:) 问候,Jan

4

3 回答 3

3

确保在 Interface Builder 中未选中Scrolling Enabled上的属性。UITextView我相信自动布局系统在计算内在内容大小时会考虑到这一点。

于 2013-07-29T14:15:14.510 回答
1

如果有人正在为类似的问题而苦苦挣扎:这就是我最终要做的:

  • 从 IB 中的 ScrollView 中删除所有子视图
  • 以编程方式将单个 UIView 添加到 ScrollView。
  • 将所有视图作为子视图添加到 UIView(使用 setFrame 移动它们)
  • 将 UIView 的 Frame 适当地设置为子视图
  • 将 ScrollView 的 contentSize 设置为 UIView 的大小。

多做一点工作,但它终于奏效了。这遵循 Apple 的混合方法指南,可在此处查看(查找 UIScrollView):http: //developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html

于 2013-07-31T09:22:39.543 回答
0

问题是高度设置。您必须以某种方式尝试删除它。如果您添加了其他“足够”的约束,它应该可以删除。

目前,您有一个“大于或等于”高度的用户约束和一个“等于”约束。显然,这些都不能很好地协同工作。

也许还有一个概念错误。下部图像视图不应固定位置,因此与下部图像视图的距离不会成为“足够”的约束,无法让您删除固定高度。

我认为它应该工作,如果

  • 下部图像视图具有固定的高度和
  • 到上面的文本视图的固定距离,和
  • 文本视图具有最小高度以及
  • 到上面的图像视图的固定距离
  • (应该相对于 superview 固定)。
于 2013-07-29T11:01:37.763 回答