gpt4 book ai didi

ios - 当 "Hide Bottom Bar on Push"对于来自 Cell 的 segue 为真时,UITableView 跳转到顶部显示 SearchBar

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:04 25 4
gpt4 key购买 nike

我遇到了一个我无法向自己解释的问题,我希望你能为我指明正确的方向,甚至为我提供合适的解决方案。

我有一个 UITableViewController 嵌入到 UINavigationController 中,带有自定义原型(prototype) UITableViewCell。在我的 Storyboard 中,我添加了一个 Segue 来显示(推送)一个细节 View Controller 到堆栈上。这工作正常,到目前为止没有任何意外。

但是,当我按下详细 View Controller 上的后退按钮时,它会返回到我的 UITableViewController,但这次,TableView 跳到顶部并显示我在其中放置 SearchBar 的 TableViews HeaderView。

当我在我的detail view controller 上选中“Hide Bottom Bar on Push”时会发生这种情况,我需要它以便detail view controller 隐藏标签栏我在其中嵌入了 NavigationController 的 UITabBarController。

我的层次结构看起来像这样:

-UITabBarController
--UINavigationController
---UITableViewController (my table view controller)
--(more view controllers for other tabs)

奇怪的是,这不会立即发生。当我返回时,一开始一切看起来都不错,但在很短的时间后它真的跳到了 tableview 的最顶部。

我在按下后退按钮后记录了 TableView contentOffset 及其类似内容:

T0.000: viewDidLayoutSubviews => -20 
T0.011: viewWillAppear => 44
T0.023: viewDidLayoutSubviews => -20
T0.530: viewDidAppear => -20 (correct value, same as before the push)
T0.540: viewDidLayoutSubviews => -64 (wrong value, showing search bar)

大约半秒后会发生什么?为什么它突然跳到顶部?我从不自己设置偏移量。它以某种方式由系统自动完成,如果我在我的详细 View Controller 中取消选中“推送时隐藏底部栏”,该行为将按预期工作,这意味着如果我之前可以看到搜索栏,那么它在之后是可见的,如果它是前隐后隐。

最佳答案

嗯,我不知道如何解决这个问题,但至少我找到了一个解决方法来停止跳跃。我在其他应用程序中观察到同样的问题,甚至苹果也不再隐藏应用程序启动时的搜索栏。也许是因为这个问题,谁知道呢?所以这是我的解决方案。

首先,只有当您的表格 View 的单元格少于它需要填满整个屏幕时才会出现此问题。一旦您的单元格多于屏幕无法容纳的单元格,在转到详细 View 然后返回主视图后,表格 View 不会跳转并停留在相同的位置。

有了这些知识,我就能够创建一个解决方法。我的解决方法很简单。我使用 segues 来显示我的应用程序的各个部分,所以在我的 UITableViewController 中,它是“master”,在准备(for segue:sender:)中,在我显示详细 View 之前,我检查 TableView 的第一个单元格是否可见.如果是这样,我滚动表格 View 以显示搜索栏。

if let firstCell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) {
if tableView.visibleCells.contains(firstCell) && !searchController.isActive {
let offset = CGPoint(x: 0, y: -tableView.contentInset.top)
tableView.setContentOffset(offset, animated: true)
}
}

单击其中一个单元格时,将执行一个显示条目详细信息的转场。如果第一个单元格可见,我将表格 View 向下滚动一点以显示搜索栏。

更好的方法可能是实际计算屏幕上可以容纳多少个单元格以及我们总共有多少个单元格,因此我们实际上只在没有足够的单元格时显示搜索栏,但我发现这个解决方案已经足够好了对我来说,因为它可以防止跳跃。

关于ios - 当 "Hide Bottom Bar on Push"对于来自 Cell 的 segue 为真时,UITableView 跳转到顶部显示 SearchBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40798678/

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