我需要UISearchBar
以上 a UITableView
(即搜索栏不是表格视图的一部分),我发现的是搜索栏被激活,它会离开屏幕。
我做了一些搜索并找不到解决方案,有“搜索栏关闭屏幕”问题,但他们正在向表的标题视图添加搜索栏,并调整definesPresentationContext
等属性修复它。
我的视图层次结构:
VC的观点 | - 顶视图 | - 分段控制 | - 搜索栏 | - 表格视图
看起来UISearchController期望搜索栏位于表格视图内,并始终移动表格视图,以便搜索栏移动到屏幕的最顶部。
任何人遇到同样的问题并找到解决方案?
非常感谢!
答案 0 :(得分:0)
我认为在tableView中放置searchBar不是必需的。我有一段时间回答同样的问题。您需要做的就是设置适当的自动布局约束。调整searchView的前导和尾随,以对齐tableView的前导和尾随。还从约束中释放margin属性。希望这可以帮到你。
答案 1 :(得分:0)
经过几次尝试后,我发现原因是当UISearchBar
被激活时,UISearchController
会将其从您的视图中删除,并将其放在自己的视图中,并带有表格视图显示结果,因为我使用自动布局搜索栏,通过删除它,一些约束被搞砸了。所以我的解决方案是不使用来自UISearchBar
的{{1}}的自动布局。
答案 2 :(得分:0)
在进一步测试之后,我决定只实现UISearchBar委托并停止使用UISearchController,因为我只是将UICollectionView用作结果。找到了great guide on how three different methods来实现SearchBar。
TLDR
启用剪辑到包含视图上的边界。或者,如果您有一个包含用户生成的内容视图的集合视图单元格,请在该内容视图上启用边界剪辑。
详细信息:
另一个非常重要的事实是,您可能在容器视图中嵌入了搜索栏。如果容器视图没有启用边界剪辑,则可能导致问题。问题的其他示例是UICollectionViewCells中用户生成的内容视图。比较UITableViewCell自动生成的内容视图上的设置,以观察差异。
摘要
一个布尔值,该值确定子视图是否限于 视图的边界。声明
var clipsToBounds:布尔{获取设置}讨论
将此值设置为true会导致子视图被裁剪到边界 接收器。如果设置为false,则子视图的框架超出 接收器的可见边界不会被裁剪。默认值 是错误的。
就我而言,这既发生在UICollectionView内部,也发生在UIStackView内部。注意到searchBar快速帮助中的以下信息后,我能够将searchBar保持在原位。
摘要
要在界面中安装的搜索栏。声明
var searchBar:UISearchBar {get}讨论
在显示可搜索的内容之前,将搜索栏安装在中 此属性进入视图控制器界面的某处。的 搜索栏成为搜索内容的起点。 与搜索栏的互动由系统自动处理 UISearchController对象,该对象在 每当搜索信息更改时,都将使用searchResultsUpdater属性。 要使用UISearchBar的自定义子类,请子类UISearchController 并实现此属性以返回您的自定义搜索栏。
之后,我可以通过执行以下操作成功解决此问题:
let searchController = UISearchController(searchResultsController: nil)
var searchBar:UISearchBar!
有时候,我将searchController中的searchBar分配给我的UIViewController中的searchBar ...
顺便说一句-我将searchBar嵌入到一个容器UIView中,该容器具有将其保持在原位所需的所有约束。
func setupSearchController<T:UIViewController>(delegate vc:T) where T: UISearchResultsUpdating, T:UISearchBarDelegate {
searchBar = searchController.searchBar //this is the key
searchController.searchResultsUpdater = vc
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search".localized()
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.delegate = vc
searchController.searchBar.showsCancelButton = true
definesPresentationContext = true
self.searchMenu.addSubview(searchBar)
//searchMenu is a constrained UIView in my hierarchy
}
答案 3 :(得分:0)
// Swift 5
//如果使用的是UISearch Controller,则只需在下面添加一行 viewDidLoad(),它将解决该问题。
pdf("pathtopdf.pdf", onefile = TRUE)
for (i in unique(df$id)) {
plot(ggplot(df[df$id==i,], aes(x = x, y = x)) + geom_point() + geom_smooth())
}
dev.off()