2014-10-28 77 views
2

我有一个UIScrollView与几个大UIViews(大于滚动视图的可见区域)。我有以下行:UIScrollView滚动太多

[[self scrollView] setContentSize:CGSizeMake([self scrollView].bounds.size.width, [ListItemView instanceHeight] * MAX_NUMBER_ITEMS)]; 

ListItemView是一个自定义视图和instanceHeight是一个静态的高度,他们都有(即第二个参数应该是所有内容的总高度,工作正常。)。问题在于,尽管我已经将内容大小(我相信)等同于滚动视图的实际大小,但它仍然水平滚动(在所有iPhone尺寸上模拟)。

的水平滚动条继续出现,直到我把内容大小为250。我发现这个通过试验和错误(在251出现水平滚动条,在250事实并非如此)。为什么是这样?我期望一旦contentSize小于scrollBar的实际大小(这是屏幕的宽度,320),滚动条就会消失。

+0

您是否在调用这行代码时检查滚动视图的大小? – rmaddy 2014-10-28 00:56:52

+0

是的。 'NSLog(@“%f”,self.scrollView.contentSize.width); 的NSLog(@“%F”,self.scrollView.bounds.size.width);'都显示320 – Connor 2014-10-28 03:36:23

回答

0

使用autolayout时的诀窍是你从不明确设置任何东西的大小;如果您的约束在您的视图层次结构中始终保持一致,则所有内容都会自动调整大小(包括scrollView的内容)。如果无法预先指定视图的大小,则应该在自定义视图子类中重写intrinsicContentSize并返回大小。

在你的情况,创建一个自定义视图,其中包含所有的ListItemViews。在那个自定义类中,返回intrinsicContentSize中ListItemViews的总高度 - 你不需要在scrollView中设置内容大小。

+0

换句话说,你猜怎么在Xcode的创造者的心目中,或者准备遭受无尽的痛苦。 – Josh 2015-05-29 14:05:09