gpt4 book ai didi

ios - UIScrollView 仅在任意应用程序交互后有效

转载 作者:行者123 更新时间:2023-11-29 00:48:18 25 4
gpt4 key购买 nike

我知道这是 this 的重复项问题,但问题似乎被放弃了,提问者没有提供反馈,并且当前的答案对我不起作用。

我目前有一个简单的应用程序,其主视图包含 UIScrollView。首次安装并运行应用程序时,没有滚动行为,并且 View 停留在内容 View 的顶部,这不是预期的功能。通过旋转设备、触摸文本字段或触摸分段控件与应用程序交互都可以纠正滚动功能(即能够滚动到内容 View 的底部):

为什么会发生这种行为?
如何修复?

详细信息:

与应用程序交互后,可以将其置于后台并重新打开,而不会丢失滚动功能。从后台手动终止应用程序并重新打开它会重新触发问题。最终目标是让滚动功能​​立即正确工作,而无需用户执行任意仪式来解锁应用程序的部分功能(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 设置为应小于滚动内容高度的值,也允许应用程序滚动很远的距离通过内容的底部。同样,设置较小的值通常会阻止 View 滚动到内容的底部。根据我对文档的理解,这似乎是一个稍微不相关(而且可能有臭味)的属性,用于解决这个问题(尽管我可能是错的)。同样,即使弄乱 contentInset 似乎会触发正确的滚动行为,但在滚动之前和之后打印 contentInset 值显示它没有发生任何更改。

我也曾尝试向 scrollContentView 添加高度约束并以编程方式设置该高度无济于事。

非常感谢对此事的任何帮助。

最佳答案

您应该按如下方式设置 contentSize 高度:

scrollView.contentSize = CGSizeMake(width, getGoalTableHeight() + Constants.formHeight); 

scrollView.contentSize.height 指的是从 contentSize 方法返回的结构的 height 成员。

关于ios - UIScrollView 仅在任意应用程序交互后有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com