我几天来一直在努力解决这个问题,我希望看看是否有人可以帮我解决这个AutoLayout问题。
在我的iOS7应用程序中,我有一个UIView
,其UIScrollView
内部有一个UIView
(容器),其中包含一些元素。我在那里,UIImageView
,UITableView
,UICollectionView
,UITextView
和MapView
。 UIScrollView
和容器UIView
没有高度限制。 UICollectionView
和UITextView
没有高度限制。
我想要完成的是
UITextview
应扩展为内容大小,因为所有文字都应显示,而UITextView
没有启用任何垂直滚动。
UICollectionView
应始终显示所有项目,并且不应启用任何滚动。
总的来说,我想要一个UIScrollView
项,其中包含基于内容的比例。我尝试了很多东西,但都失败了。
如果有人有关于如何做到这一点的指示或建议,那将非常有帮助。
答案 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应用程序..