公平警告,我对iOS很新,可能会遗漏一些明显的东西。
我有一个UIScrollView
,其中包含一些字段,这些字段的高度可以更改(UITextView
拉伸以适合文本,可折叠字段等)。显然,我希望scrollview contenSize
适合内容以允许滚动。
现在我已将其设置为每次更改时重新计算并设置contentSize
,这样可以正常工作但有更好的方法吗?换句话说,如果另一个开发人员现在添加一个字段并且不记得将其添加到重新计算函数中,除非我弄错了,即使该字段在滚动视图上,滚动视图contentSize
也会出错?是否没有办法让它随着内容的变化“自动”调整大小?
答案 0 :(得分:4)
是的,有一种更好的方法可以通过自动布局来实现这一目标。 Apple有一个非常好的文档,可以使用带滚动视图here的自动布局。我更喜欢纯autolayout方法,但是为了应用这种方法,你必须确保字段的大小不依赖于scrollview的大小,这是有道理的。但是请确保您的约束扩展到滚动视图的所有边,以便scrollview可以确定其内容的大小。
(即@"H:|[textView(==view)]|"
和@"V:|[textView(50)]|"
其中'|'表示textView是子视图的scrollView,'== view'只指定textView的宽度必须与视图'view'。)
答案 1 :(得分:1)
如果autolayout是你的一个选项,那就去吧 - 正如泰勒所说,自动布局抽象为你调整大小! :) 不幸的是,我还没有自动布局的经验,所以我不能告诉你更多关于它的事情。
据我所知,没有自动布局,没有更好的方法。 没有像“sizeToFit”或“sizeThatFits”那样可以自动接管调整内容大小的任务。您必须自己重新计算内容大小。 为此目的,要么使用自定义方法进行此重新计算任务,要么在UIScrollView上查看已经实现并抽象出来的一些第三方类别。
例如:UIScrollView+MTUIAdditions.m
(参见UIScrollView (MTUIAdditions)
的实施)
答案 2 :(得分:0)
最佳解决方案
//autoresize scrollView
CGFloat scrollViewHeight = 0.0f;
CGFloat scrollViewWidth = 0.0f;
for (UIView *view in self.scrollView.subviews) {
CGFloat height = (view.frame.size.height + view.frame.origin.y);
scrollViewHeight = ((height > scrollViewHeight) ? height : scrollViewHeight);
CGFloat width = (view.frame.size.width + view.frame.origin.x);
scrollViewWidth = ((width > scrollViewWidth) ? width : scrollViewWidth);
}
[self.scrollView setContentSize:(CGSizeMake(scrollViewWidth, scrollViewHeight))];