gpt4 book ai didi

ios - 带有 UIBarPositionTopAttached 的 UISearchController 将 UISearchBar 抛出屏幕;不可能有标准的 UISearchController 和 UITableView?

转载 作者:可可西里 更新时间:2023-11-01 03:34:58 35 4
gpt4 key购买 nike

我正在尝试创建与 iOS 8 中的联系人应用程序类似的体验。其主要组件是:

  1. 保持搜索栏固定在导航栏下方
  2. 在展示时将搜索栏附加到 View 顶部(标准功能)。

然而,这说起来容易做起来难。在与 tableHeaderView(它不允许在 TableView 前面进行交互,并且 viewDidLayoutSubviews 定位很复杂)苦苦挣扎了一段时间之后,我决定嵌入一个UITableViewUIViewController 中,因此我可以将 UISearchBar 添加为 subview 。这非常有效,并且允许在所有滚动位置与搜索栏进行交互,并且插入不难计算。

但是,搜索栏在激活时会在状态栏下方被截断。这似乎是一个简单的问题 — 即使我没有在 完全相同的实现 UITableViewController 中。因此,我尝试确保在每个可能的 View Controller 中我的所有属性都设置为对齐。

self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;
self.automaticallyAdjustsScrollViewInsets = NO;

我已经尝试了所有可能的组合,包括 viewWillAppear 和 viewDidLoad,以及半透明导航栏和表格 View 和搜索栏的不同起始框架。没运气。因此,我尝试调整框架或约束,可能使用 topLayoutGuide 或仅使用 0。不幸的是,在任何 UISearchControllerDelegate 方法中调整框架实际上并没有调整其呈现的位置,并且在事件动画开始时添加约束立即崩溃(由于 super.top 当时不存在于 View 层次结构中;删除 willPresent 中的约束完全没有任何作用。

经过一段时间的挣扎,我尝试将 positionForBar 实现为 UISearchBar 的委托(delegate):

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}

这似乎调整了高度,但搜索栏飞离了 View 的顶部。激活后,搜索栏似乎直接出现在可见区域上方 .这比它被夹在 UIStatusBar 后面或下面更糟糕。我还尝试在搜索 Controller 激活时隐藏状态栏,但是有条件地实现 prefersStatusBarHidden 根本不起作用(返回 YES 在没有 UISearchController 的情况下效果很好 事件,但当事件时它再次显示状态栏或显示在它下面)。我认为这是因为 UISearchController 拒绝遵守任何标准或规则,现在已经很清楚了。

debug hierarchy inactive state active state

几天来我一直在努力解决这个问题,除了完全重新实现 UISearchController 类/动画之外,我想不出解决方案。请帮忙!

最佳答案

对于您描述的行为,这对我来说非常有用😊

var resultSearchController = UISearchController()

以及您的 viewDidLoad 函数中的以下内容:

//Search Bar
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.searchBar.sizeToFit()
controller.dimsBackgroundDuringPresentation = false

self.tableView.tableHeaderView = controller.searchBar
self.definesPresentationContext = true
return controller
})()

关于ios - 带有 UIBarPositionTopAttached 的 UISearchController 将 UISearchBar 抛出屏幕;不可能有标准的 UISearchController 和 UITableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504418/

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