使用collectionview的Autolayout scrollview

时间:2014-01-23 17:10:57

标签: ios uiscrollview

我几天来一直在努力解决这个问题,我希望看看是否有人可以帮我解决这个AutoLayout问题。

在我的iOS7应用程序中,我有一个UIView,其UIScrollView内部有一个UIView(容器),其中包含一些元素。我在那里,UIImageViewUITableViewUICollectionViewUITextViewMapViewUIScrollView和容器UIView没有高度限制。 UICollectionViewUITextView没有高度限制。

我想要完成的是

  1. UITextview应扩展为内容大小,因为所有文字都应显示,而UITextView没有启用任何垂直滚动。

  2. UICollectionView应始终显示所有项目,并且不应启用任何滚动。

  3. 总的来说,我想要一个UIScrollView项,其中包含基于内容的比例。我尝试了很多东西,但都失败了。 如果有人有关于如何做到这一点的指示或建议,那将非常有帮助。

3 个答案:

答案 0 :(得分:1)

好的,我会以完全不同的方式解决这个问题。

首先,完全摆脱scrollView。

只需在整个界面中使用UICollectionView。

UICollectionView可以使用UIView作为节头。使用你的UITextView制作这个UIView。您需要手动计算UITextView(和UIView)的正确高度。

像...一样的东西。

CGSize size = [theText sizeWithFont:<the font used> constrainedToSize:CGSizeMake(desiredWidth, CGFLOAT_MAX)];

然后只填充您的收藏视图。

通过这样做,您的集合视图将控制所有滚动。因为您已在标题中将textview设置为正确的大小,所以您将拥有所有文本。

答案 1 :(得分:0)

我会这样做:

我认为您的问题与视图的高度有关,这会影响滚动。

textViewDidChange:中,我会将UITextView的框架设置为与contentSize相同。当它们都相同时,滚动会被禁用。

填充UITableView并致电reloadData后,我会将其设置为与contentSize相同的框架。

我想,mapView(MKMapView,我猜)在整个框架中都有相同的框架。所以你只需使用它的固定高度。如果它改变了高度,你必须在每次改变时存储它的高度变化。

一旦掌握了所有高度,将它们相加,然后将外部视图的框架设置为与内部视图的组合高度相同。将此迭代到所有嵌套视图,从最内层视图开始,然后移动到外部视图。

这里的问题是,每当您的内容发生变化时,都必须调整帧的大小。因此,在textViewDidChange:之后更改reloadData中的帧等是有意义的。

编辑:您可能首先要做的一件事是,摆脱多余的视图。您的视图层次结构对我来说似乎是Rube Goldberg。你拥有较少的观点,你将需要做的工作较少。

答案 2 :(得分:0)

好的..所以我通过在UITextView上为我的NSLayoutConstraint创建一个IBOutlet解决了这个问题。

我只是计算了高度然后将其应用于约束并且它有效..

@Fogmeister - 您的解决方案也可以使用,但它需要重新连接整个UI页面..您的方法绝对是可行的,并且应该记住未来的iOS应用程序..