如果单击 UISearchBar,则更改 UITableView 位置:[使用 ModernSearchBar]

Posted

技术标签:

【中文标题】如果单击 UISearchBar,则更改 UITableView 位置:[使用 ModernSearchBar]【英文标题】:Change UITableView position if UISearchBar is clicked: [using ModernSearchBar] 【发布时间】:2018-05-23 23:04:26 【问题描述】:

免责声明:我对 Swift 相当陌生,并且来自非开发人员背景 - 所以在我解释这个问题时请多多包涵。我正在使用 Swift 4、Xcode 9

我需要在我的应用程序中使用的 UISearchBar 上具有自动建议功能 - 为此我使用了 ModernSearchBar 库。它对我来说一直很好,但最近我编辑了我的UISearchBar 代码,以便它移动到页面顶部,并且用户可以使用更大的区域来查看其中的建议。但我目前面临this issue - 所以虽然UISearchBar 按预期上升,但建议列表没有。我知道这个问题对于这个库来说是非常具体的,但如果有人指出我正确的方向,我将不胜感激。

ModernSearchBar 本身是对应用程序的一个非常简洁的补充,如果可能的话,我想保留它。但是请告诉我是否应该考虑放弃它并自己构建 UI。

【问题讨论】:

当点击搜索栏时,您必须更改 tableview 顶部的约束。 所以我在编辑库时注意到了一些东西。如果我在UISearchBar 内部点击一次(然后它向上移动),然后在其外部点击一次,然后在内部再次点击(UISearchBar 仍然在顶部)-UITableView 的位置会自行更新。所以UISearchBar 的位置偏移第一次没有被检测到,但它在第二次点击时。也许我应该研究一下searchBarTextDidBeginEditing 函数? 是否在工作约束基础?如果是,那么您需要为父视图设置layOutIfNeeded()。 【参考方案1】:

因此找到了一个相对简单的解决方案——库中的文件ModernSearchBar.swift 有一个名为configureViews() 的函数,它设置UITableView 的属性(即建议列表)。我编辑了searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 函数并将这一行if self.suggestionsView.frame.height == 0.0 self.configureViews() 添加到其中。这有效,即建议列表视图也按预期更新到UISearchBar 的顶部位置。由于框架高度限制,它也不会多次更新位置。

更新: 我遇到的另一个问题是,如果我搜索一个单词并返回到上一页,搜索结果视图每次都会略微向上移动并开始覆盖UISearchBar 部分,然后退出视图。在我删除代码以更新同一文件中keyboardWillShow(notification: NSNotification) 函数中的建议列表大小后,问题得到解决。不确定原因,但现在它在手机和模拟器上都可以正常工作。

【讨论】:

以上是关于如果单击 UISearchBar,则更改 UITableView 位置:[使用 ModernSearchBar]的主要内容,如果未能解决你的问题,请参考以下文章

单击 UISearchBar 的取消按钮后,如何使用 UISearchBar 刷新我的 UITableView?

更改 UISearchBar 的键盘颜色

如何更改 UISearchBar 占位符和图像色调颜色?

如何在iOS 7中更改文本UISearchBar的取消按钮颜色?

如何在 iOS7 中更改 UISearchBar 的背景颜色

使用 Monotouch 在 UISearchBar 上更改“取消”按钮的文本?