我已经实现了一个简单的表视图控制器,其中搜索显示控制器通过Interface Builder拖出。然后我启用了刷新功能,以便在用户下拉刷新时可以看到刷新控件。
问题是,当搜索栏位于搜索栏下方时,微调器可见。
我知道原因是最小搜索风格。如果您使用默认的Prominent样式,则问题不存在。
当你慢慢拉下来时,你会看到第一行显示在搜索栏的上方,如下所示:
如果你继续拉,它会显示在你期望的位置,但是如果你在视图仍然刷新时将视图重新向上移动,你会在搜索栏顶部看到微调器,如下所示:
一旦将其向上推,使得微调器接触到第一节标题,微调器立即消失。
这就是它应该在搜索栏下面看起来的样子,就像在Mail中一样:
我试图通过简单地让微调器位于搜索栏下方来解决问题,这样它就不会出现在顶部,但是这不起作用。奇怪的是,该代码导致微调器在桌面上方的灰色区域中不可见,如果你将其向上推,它会出现在搜索栏的上方 - 与我期望的完全相反。这是代码:
self.refreshControl.layer.zPosition = self.searchDisplayController.searchBar.layer.zPosition - 1;
如何在使用最小样式时阻止微调器出现在搜索栏的顶部?
答案 0 :(得分:3)
要解决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!
}
}
答案 1 :(得分:1)
这似乎是Minimal Bar Style的一个错误。如果您将其设置为Prominent,您将无法体验该问题。如果您使用Prominent并尝试删除背景,您也会遇到此问题。我发现的唯一解决方法是尝试使用Prominent样式模仿Minimal样式。
答案 2 :(得分:0)
在设置时将刷新控件移动到搜索栏后面。
refreshControl.layer.zPosition -= 1
答案 3 :(得分:-1)
因此,如果它可以帮助任何人我遇到同样的问题并且快速解决方案是将refreshcontrol添加为self.view的子视图而不是tableheaderview。这将把控制器添加到其他所有东西之上,并且你可以看到它。另一方面,我相信你可以完全纠正y在正确的layer.zPosition下设置它。但我没有时间完全纠正它。
[self.view addSubview:self.refreshControl];