gpt4 book ai didi

ios - 单击内部选项卡时保持 ScrollView 位置(刷新内部数据)

转载 作者:行者123 更新时间:2023-11-29 06:00:08 24 4
gpt4 key购买 nike

ScrollView - 内容 View - 1) 图像,2) 选项卡,3) 堆栈 View

以上是我的 Storyboard安排。 选项卡实际上是 Collection View 。在选项卡下方,有堆栈 View (也在内容 View 内)。当我单击每个选项卡时,我会在 didSelect发送所选选项卡的索引。它将调用具有以下流程的 refreshData 函数:堆栈 View 中的当前 subview 将被删除(使用 vc.mainStack .subviews.forEach({ $0.removeFromSuperview() })) 并将根据所选选项卡的索引重新加载另一个 subview 。图像的位置将保持不变,即位于页面顶部。但是,每次我单击该选项卡时,屏幕都会滚动到顶部。如何保持滚动位置(在单击另一个选项卡之前),以便当我单击新选项卡时,它将保持在相同的滚动位置?

self.yContentOffset = scrollView.contentOffset.y

已经在scrollViewDidScroll中添加上面的代码并且

vc.scrollView.contentOffset.y = self.yContentOffset

删除堆栈中的所有 subview 后添加上面的代码,然后我调用新数据(对于 subview )。还尝试在调用新的 subview 后添加代码,但两者都不起作用。有谁知道如何做到这一点的逻辑?

最佳答案

听起来问题在于,在删除当前 subview 和添加新 subview 之间,UI 正在“刷新”。因此,您的 mainStack 变得非常短,导致内容 View 不够高,无法需要滚动,并且您的 ScrollView 会相应地自行调整。

您的选择是等待删除 subview ,直到获得新的 subview ,然后在同一函数中删除/添加,或者用清晰的“占位符” View 替换 subview 。

第二个选项可能如下所示:

func replaceViewsWithPlaceholderView() -> Void {

// get an array of the current views in the stack
let viewsToRemove = mainStack.arrangedSubviews

// create a clear view
let v = UIView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = .clear

// needs a width
v.widthAnchor.constraint(equalToConstant: 1).isActive = true

// constrain the height of the "place holder" view to the current height of the stack view
v.heightAnchor.constraint(equalToConstant: mainStack.frame.height).isActive = true

// add the "place holder" view to the stack
mainStack.addArrangedSubview(v)

// remove the views that were in the stack
viewsToRemove.forEach {
$0.removeFromSuperview()
}

}

然后在您的函数中根据所选选项卡添加新的 subview ,首先:

    // remove the "place holder" view
mainStack.arrangedSubviews.forEach {
$0.removeFromSuperview()
}

随后(可能是 .forEach 循环)将新的 subview 添加到 main.Stack

当然,如果您已经滚动,因此您的“选项卡”位于 ScrollView 的顶部,并且“选项卡 B”没有足够的 subview 来需要滚动,则 ScrollView 将再次调整 - 但仅限于内容 View 底部位于 ScrollView 底部的点。

关于ios - 单击内部选项卡时保持 ScrollView 位置(刷新内部数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54762903/

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