【问题标题】:UIScrollView Scrolls Too MuchUIScrollView 滚动太多
【发布时间】:2014-10-28 00:55:27
【问题描述】:

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

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

ListItemView 是自定义视图,instanceHeight 是它们都具有的静态高度(即,第二个参数应该是所有内容的总高度,这样可以正常工作)。问题是,即使我使内容大小(我相信)等于滚动视图的实际大小,它仍然水平滚动(在所有 iPhone 尺寸上模拟)。

水平滚动条会继续出现,直到我将内容大小设置为 250。我通过反复试验发现了这一点(在 251 处出现水平滚动条,在 250 处不出现)。为什么是这样?我希望一旦 contentSize 小于滚动条的实际大小(即屏幕宽度,320),滚动条就会消失。

【问题讨论】:

  • 在调用这行代码的时候你检查过滚动视图的大小吗?
  • 是的。 NSLog(@"%f", self.scrollView.contentSize.width); NSLog(@"%f", self.scrollView.bounds.size.width); 均显示 320。

标签: ios uiscrollview autolayout


【解决方案1】:

使用自动布局的技巧是你永远不会明确设置任何东西的大小;如果您的约束在整个视图层次结构中设置一致,则所有内容都会自动调整大小(包括滚动视图的内容)。如果无法提前指定视图的大小,则应在自定义视图子类中覆盖 intrinsicContentSize 并返回大小。

在您的情况下,创建一个包含所有 ListItemViews 的自定义视图。在该自定义类中,返回 IntrinsicContentSize 中 ListItemViews 的总高度——您根本不需要在 scrollView 中设置内容大小。

【讨论】:

  • 换句话说,猜猜 XCode 的创造者在想什么,或者准备忍受无尽的痛苦。
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多