我理解这是this问题的重复,但问题似乎已经放弃,提问者没有提供反馈,而且目前的答案对我没有用。
我目前有一个简单的应用程序,其主视图包含一个UIScrollView。首次安装并运行应用程序时,没有滚动行为,视图卡在内容视图的顶部,这不是预期的功能。通过旋转设备,触摸文本字段或触摸分段控件来与应用程序交互,都可以更正滚动功能(即,可以滚动到内容视图的底部):
为什么会发生这种情况? 怎么修好?
应用程序交互后,可以将其置于后台并重新打开,而不会丢失滚动功能。从后台手动终止应用程序并重新打开它将重新触发该问题。最终目标是让滚动功能正确且立即正常工作,而无需用户执行任意仪式来解锁应用程序的部分功能(非常强烈建议不要使用Apple的HMI指南)。
有问题的UIScrollView(scrollView)嵌入在最顶层的UIView中,它有一个UIView(scrollContentView)作为子项。 scrollView的contentSize.height是在我的viewWillLayoutSubviews()函数中以编程方式定义的,这是UIScrollView在执行上述操作之一时使用的高度:
override func viewWillLayoutSubviews()
{
super.viewWillLayoutSubviews();
// (This is just setting a child table of the scrollView's height)
// Set the goal table's height to the height of its contents
formulaTableHeightConstaint.constant = getGoalTableHeight();
scrollView.contentSize.height = getGoalTableHeight() + Constants.formHeight;
}
在viewWillLayoutSubviews()函数的末尾,如果我打印scrollView.contentSize.height,它会在2000左右显示一个大值,并且打印scrollView.frame.size.height会显示大约600的值。
我曾尝试使用scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: SomeArbitraryValues, right: 0)
。这允许在首次打开应用程序时立即滚动,但行为不直观,即使将bottom
设置为应小于滚动内容高度的值,也允许应用程序滚动距离底部较远的距离的内容。同样,设置较小的值通常会阻止视图滚动到内容的底部。根据我从文档中的理解,这似乎是一个稍微不相关(也许是臭)的属性来解决这个问题(尽管我可能是错的)。同样,即使搞乱contentInset似乎触发了正确的滚动行为,在滚动工作之前和之后打印contentInset值也表明没有发生任何变化。
我还尝试在scrollContentView中添加一个高度约束,并以编程方式设置该高度无效。
非常感谢任何有关此事的帮助。
答案 0 :(得分:1)
您应该按如下方式设置contentSize高度:
scrollView.contentSize = CGSizeMake(width, getGoalTableHeight() + Constants.formHeight);
scrollView.contentSize.height
指的是从height
方法返回的结构的contentSize
成员。