呈现搜索结果控制器时 UISearchBar 的高度不正确
Posted
技术标签:
【中文标题】呈现搜索结果控制器时 UISearchBar 的高度不正确【英文标题】:UISearchBar's height is incorrect when presenting search result controller 【发布时间】:2017-12-27 07:09:00 【问题描述】:我在tableView的标题视图中有一个搜索栏,我没有改变它的高度(默认是56pt)。当搜索栏处于活动状态并且其位置位于屏幕顶部时,它的高度变为 50pt。它会在 iPhone 或模拟器(ios 11 版本)上发生。
首次出现:
<UISearchBar: 0x7f94b6646900; frame = (0 0; 375 56); text = ''; gestureRecognizers = <NSArray: 0x60400025fc20>; layer = <CALayer: 0x604000225fe0>>
编辑:
<UISearchBar: 0x7f94b6646900; frame = (0 14; 375 50); text = ''; autoresize = W+TM; gestureRecognizers = <NSArray: 0x60400025fc20>; layer = <CALayer: 0x604000225fe0>>
这会导致搜索栏和结果控制器的视图之间出现奇怪的差距。
感谢您的任何想法。
编辑1: 这是我的代码:
fileprivate func configSearchBar() -> Void
let bar = self.searchBar
var size = bar.frame.size
let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
bar.setBackgroundImage(UIImage.imageWith(color: .white, size: size),
for: .any,
barMetrics: .default)
let colorWhenEditing = UIColor.colorFromHexString("#FAFAFA")
if UIDevice.isIPHONEX()
bar.barTintColor = colorWhenEditing
else
bar.setBackgroundImage(UIImage.imageWith(color: colorWhenEditing, size: CGSize(width: size.width, height: size.height + statusBarHeight)),
for: .topAttached,
barMetrics: .default)
size = CGSize(width: bar.frame.size.width - 30, height: 30)
let image = UIImage.imageWith(color: UIColor(hexString: "#F0F0F0"), size: size)?.zoom(toSize: size, cornerRadius: 4)
bar.setSearchFieldBackgroundImage(image, for: .normal)
bar.searchTextPositionAdjustment = UIOffset(horizontal: 5, vertical: 0)
self.tableView.tableHeaderView = self.searchBar
Edit2: - 搜索控制器和搜索栏初始化:
// Main view controller
lazy var searchResultController: UISearchController =
let vc = MailSearchResultViewController(nibName: nil, bundle: nil)
let sc = UISearchController(searchResultsController: vc)
sc.searchResultsUpdater = self
sc.modalPresentationCapturesStatusBarAppearance = true
sc.delegate = self
return sc
()
var searchBar: UISearchBar
return searchResultController.searchBar
// MailSearchResultViewController - viewDidLoad:
self.edgesForExtendedLayout = []
self.automaticallyAdjustsScrollViewInsets = false
【问题讨论】:
分享您的UISearchBar
代码。
你是如何将它作为标题视图添加到表格视图中的?你在代码里做过吗?
@ImadAli 在Edit1中添加代码。
@AhmadF 见 Edit1
您会尝试this answer 而不是以编程方式进行吗?
【参考方案1】:
我认为问题在于自动调整 scrollView 插图。要解决此问题,请执行以下操作
-
转到故事板。
选择包含搜索栏控制器的控制器
转到属性检查器
取消选中调整滚动视图插图
【讨论】:
我不使用故事板,我在搜索结果视图控制器和 UISearchController 中以编程方式将automaticallyAdjustsScrollViewInsets
设置为 false,但这不起作用。【参考方案2】:
由于您正在使用 iOS 11,并且从 cmets 看来您有一个导航控制器,您应该考虑将搜索栏直接放在导航项中,而不是表视图标题,这仍然是您应该使用的方法iOS 10 及之前版本。您可以查看文档here。
似乎自从 Apple 引入了这种显示搜索栏的新方式后,UIKit 不再能够在 iOS 11 及更高版本的表格视图标题中正确显示它。您还可以查看this question(在 ObjC 中),其中相同的更改会引入您的相同问题或来自 Apple 的 this video。
【讨论】:
以上是关于呈现搜索结果控制器时 UISearchBar 的高度不正确的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠
UISearchBar 在活动时与 UITableView 内容重叠