web-dev-qa-db-ja.com

ナビゲーションバーのtitleViewのサイズを変更する方法。ナビゲーションバーのtitleViewとbackButtonの間にギャップがあるため

ナビゲーションに検索バーを追加しました。titleView

    self.navigationItem.titleView = searchBar

Title = ""のBackBarButtonItemもあります

    self.navigationItem.backBarButtonItem?.title = ""

しかし、次のように、Back ButtonSearchBarの間にギャップがあります。 There're gap between Back Button and SearchBar

titlebackBarButtonItemのスペースがあるため、ここにギャップが表示されると思います(私のtitleはnull ""ですが、スペースはまだあります)

だから私はそのギャップをどのように省略するかを尋ねたいですか? searchBarbackBarIconに近づけたい

どうもありがとうございます!

編集1:searchBarのフレームを変更しようとしましたが、機能しません

これは私のコードです

    //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)
8
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

9
Peter Cheng

それはできません。戻るボタンがある場合は変更できないデフォルトのスペースがあります。

 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

1
Arun
class SearchBarContainerView: UIView {  
  let searchBar: UISearchBar  
  init(customSearchBar: UISearchBar) {  
    searchBar = customSearchBar  
    super.init(frame: CGRect.zero)  

    addSubview(searchBar)  
  }

  override convenience init(frame: CGRect) {  
    self.init(customSearchBar: UISearchBar())  
    self.frame = frame  
  }  

  required init?(coder aDecoder: NSCoder) {  
    fatalError("init(coder:) has not been implemented")  
  }  

  override func layoutSubviews() {  
    super.layoutSubviews()  
    searchBar.frame = bounds  
  }  
}  

class MyViewController: UIViewController {  
  func setupNavigationBar() {  
    let searchBar = UISearchBar()  
    let searchBarContainer = SearchBarContainerView(customSearchBar: searchBar)  
    searchBarContainer.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 44)  
    navigationItem.titleView = searchBarContainer  
  }  
}
0
Ezaz ahmad