簡體   English   中英

呈現搜索結果控制器時,UISearchBar的高度不正確

[英]UISearchBar's height is incorrect when presenting search result controller

我在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

我認為問題是自動調整scrollView Insets。 要解決此問題,請執行以下操作

  1. 去故事板。
  2. 選擇包含searchbarcontroller的控制器
  3. 轉到屬性檢查器
  4. 取消選中“調整滾動視圖插圖”

由於您正在使用iOS 11,並且從評論中看起來您有導航控制器,您應該考慮將搜索欄直接放在導航項目中而不是表格視圖標題中,這仍然是您應該在iOS 10上使用的方法之前。 你可以在這里查看文檔。

似乎自Apple推出這種顯示搜索欄的新方式后,UIKit不再能夠正確地從iOS 11及更高版本的表格視圖標題中顯示它。 您也可以查看此問題 (在ObjC中),此相同的更改會引入相同的問題或來自Apple的此視頻

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM