[英]Refresh Control with Search Display Controller appears overtop the Search Bar
我已经实现了一个简单的表视图控制器,通过Interface Builder拖出了搜索显示控制器。 然后我启用了刷新,以便在用户下拉刷新时可以看到刷新控件。
问题是,当搜索栏位于搜索栏下方时,它可以在搜索栏的顶部看到。
我知道原因是最小搜索风格。 如果使用默认的Prominent样式,则问题不存在。
当你慢慢拉下来时,你会看到第一行显示在搜索栏的上方,如下所示:
如果你继续拉动,它会显示在你期望的位置,但是如果你在视图仍然刷新的同时将视图重新推回,你会在搜索栏顶部看到微调器,如下所示:
一旦你将它向上推,使得微调器触及第一节头,旋转器立即消失。
这就是它应该看起来的样子,就像在Mail中一样 - 位于搜索栏下方:
我试图通过简单地使微调器位于搜索栏下方来解决问题,这样它就不会出现在顶部,但是这不起作用。 奇怪的是,该代码导致微调器在桌面上方的灰色区域中不可见,如果你将其向上推,它会出现在搜索栏的上方 - 与我期望的完全相反。 这是代码:
self.refreshControl.layer.zPosition = self.searchDisplayController.searchBar.layer.zPosition - 1;
使用最小样式时,如何防止微调器出现在搜索栏的顶部?
要解决UISearchBarStyleMinimal
此错误,您必须为任何图像设置backgroundImage
属性。 仅当设置了背景图像时,布局才能正常运行。
private extension UISearchBar {
private func setBackgroundColorWithImage(color: UIColor) {
let rect = self.bounds
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor)
CGContextFillRect(context, rect);
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.backgroundImage = image // here!
}
}
这似乎是Minimal Bar Style的一个错误。 如果您将其设置为Prominent,您将不会遇到此问题。 如果您使用Prominent并尝试删除背景,您也会遇到此问题。 我发现的唯一解决方法是尝试使用Prominent样式模仿Minimal样式。
在设置时将刷新控件移动到搜索栏后面。
refreshControl.layer.zPosition -= 1
因此,如果它有助于任何人我遇到同样的问题,并且快速解决方案是将refreshcontrol添加为self.view的子视图而不是tableheaderview。 这将把控制器添加到其他所有东西之上,并且你可以看到它。 另一方面,我相信你可以完全纠正y在正确的layer.zPosition下设置它。 但我没有时间完全纠正它。
[self.view addSubview:self.refreshControl];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.