Ios 显示搜索结果控制器时,UISearchBar的高度不正确

Ios 显示搜索结果控制器时,UISearchBar的高度不正确,ios,swift,uisearchbar,uisearchcontroller,uisearchresultscontroller,Ios,Swift,Uisearchbar,Uisearchcontroller,Uisearchresultscontroller,我在tableView的标题视图中有一个搜索栏,我不更改它的高度默认值为56磅。当搜索栏处于活动状态且其位置位于屏幕顶部时,其高度变为50磅。这两种情况都将发生在iPhone或iOS 11版模拟器上 首次出现: Edit2:-搜索控制器和搜索栏初始化: // Main view controller lazy var searchResultController: UISearchController = { let vc = MailSearchResultViewController

我在tableView的标题视图中有一个搜索栏,我不更改它的高度默认值为56磅。当搜索栏处于活动状态且其位置位于屏幕顶部时,其高度变为50磅。这两种情况都将发生在iPhone或iOS 11版模拟器上

首次出现:

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

我认为问题在于自动调整滚动视图插入。要解决此问题,请执行以下操作

转到情节提要。 选择包含searchbarcontroller的控制器 转到属性检查器 取消选中“调整滚动视图插入”

因为你正在处理IOS 11,并且从评论看来你有一个导航控制器,你应该考虑把搜索栏直接放在导航项中而不是表视图头,这仍然是你应该在iOS 10之前使用的方法。您可以查看文档


似乎自从苹果推出这种新的搜索栏显示方式以来,UIKit就不再能够在iOS 11及更高版本上从表视图标题正确显示它。您也可以在ObjC中检查相同的更改导致的相同问题,或者从Apple中检查。

共享您的UISearchBar代码。您是如何将其作为标题视图添加到表视图的?你在代码中完成了吗?@ImadAli在Edit1中添加代码。@AhmadF See Edit1你能尝试一下而不是通过编程完成吗?我不使用故事板,我通过编程将搜索结果视图控制器和UISearchController中的automaticallyAdjustsScrollViewInsets设置为false,但这不起作用。
<UISearchBar: 0x7f94b6646900; frame = (0 14; 375 50); text = ''; autoresize = W+TM; gestureRecognizers = <NSArray: 0x60400025fc20>; layer = <CALayer: 0x604000225fe0>>
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
// 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