2017-02-24 229 views
5

我添加了一個搜索欄我navigation.titleView titleview的和後退按鈕之間的空隙如何更改導航欄中titleView的大小。因爲有在的導航欄

self.navigationItem.titleView = searchBar 

還有與標題BackBarButtonItem =「」

self.navigationItem.backBarButtonItem?.title = "" 

但後來有「再差距Back ButtonSearchBar之間,就像這樣: There're gap between Back Button and SearchBar

我想是因爲那裏的0123空間,在這裏出現的差距的backBarButtonItem(因爲我的title爲空「」但空間仍然存在)

所以我想問一下如何忽略那個差距?我想讓我的searchBar更接近我的​​

非常感謝!

編輯1: 我試圖改變搜索欄的框架,但它不工作

這是我的代碼

//Change searchBar's frame   
    let titleViewFrame = (searchController.searchBar.frame) 
    searchController.searchBar.frame = CGRect(x: titleViewFrame.minX - 20.0, y: titleViewFrame.minY, width: titleViewFrame.width + 20.0, height: titleViewFrame.height) 
+0

嘗試使你的搜索欄寬通過調整其'frame'。 –

+0

我做了IT,但它仍然無法正常工作 –

+0

請看下面的@Peter Chang的解決方案,這是通過AutoLayout完成的。 –

回答

5
override func viewDidLoad() { 
    super.viewDidLoad() 

    let container = UIView(frame: CGRect(x: 0, y: 0, width: 1000, height: 22)) 

    let searchBar = UISearchBar() 
    searchBar.translatesAutoresizingMaskIntoConstraints = false 
    container.addSubview(searchBar) 

    let leftButtonWidth: CGFloat = 35 // left padding 
    let rightButtonWidth: CGFloat = 75 // right padding 
    let width = view.frame.width - leftButtonWidth - rightButtonWidth 
    let offset = (rightButtonWidth - leftButtonWidth)/2 

    NSLayoutConstraint.activate([ 
     searchBar.topAnchor.constraint(equalTo: container.topAnchor), 
     searchBar.bottomAnchor.constraint(equalTo: container.bottomAnchor), 
     searchBar.centerXAnchor.constraint(equalTo: container.centerXAnchor, constant: -offset), 
     searchBar.widthAnchor.constraint(equalToConstant: width) 
    ]) 


    self.navigationItem.titleView = container 
} 

enter image description here

+1

爲什麼我不能點擊搜索文本,好像有一個容器會阻止它 –

+0

它運行時看起來不錯,但它不響應輸入。另外,注意到如果你觸摸左側,它就像後退按鈕被選中一樣。它就像它不在那裏。 –

+0

@JeffMuir由於默認後退按鈕框架大小比它看起來大,您可以使用您自己的左側欄按鈕而不是系統,以避免此問題 –

0

你不能做到這一點,也被賦予了默認空間,我們無法改變如果我們有後退按鈕。

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) 
     self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back") 

    self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back") 

    self.navigationController?.navigationBar.tintColor = UIColor.lightGray 

下面是截圖 enter image description here