我知道这是一个重复的this问题,但这个问题似乎被抛弃了,提问者没有提供反馈,目前的答案对我没有用。
我现在有一个简单的应用程序,它的主视图包含一个UIScrollView。当应用程序第一次安装和运行时,没有滚动行为,视图被卡在内容视图的顶部,这不是预期的功能。通过旋转设备、在文本字段中触摸或触摸分段控件与应用程序交互都可以纠正滚动功能(即赋予滚动到内容视图底部的能力):
为什么会发生这种行为?
怎么能修好?
详细信息:
一旦应用程序被交互,它可以放在后台并重新打开,而不会失去滚动功能。从后台手动终止应用程序并重新打开它将重新触发问题。最终的目标是让滚动功能立即正确地工作,而不需要用户执行任意的仪式来解锁应用程序的部分功能(在苹果的HMI指导方针中非常不鼓励)。
问题中的UIScrollView (scrollView)嵌入到最顶层的UIView中,并且它有一个作为子级的UIView (scrollContentView)。滚动视图的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添加一个高度约束,并以编程方式设置该高度,但没有效果。
我们非常感谢在这件事上提供的任何帮助。
发布于 2016-07-15 08:33:08
您应该将contentSize高度设置为:
scrollView.contentSize = CGSizeMake(width, getGoalTableHeight() + Constants.formHeight);
scrollView.contentSize.height
引用从contentSize
方法返回的结构的height
成员。
https://stackoverflow.com/questions/38400648
复制相似问题