首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationItem TitleView约束无效

NavigationItem TitleView约束无效
EN

Stack Overflow用户
提问于 2018-10-01 02:22:39
回答 2查看 1.4K关注 0票数 0

我想使用UITextField创建一个搜索栏。我尝试将NavigationItem的TitleView设置为textfield并设置相应的约束。但是在导航栏的中央,textfield仍然非常短。如何使文本字段填充整个导航栏?这是我的代码:

代码语言:javascript
复制
cancelbtn = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CourseTableViewController.searchCancelled))
self.navigationItem.leftBarButtonItem = cancelbtn

let searchField = UITextField()
searchField.translatesAutoresizingMaskIntoConstraints = false
searchField.borderStyle = .roundedRect
self.navigationItem.titleView = searchField
self.navigationItem.titleView!.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: cancelbtn.width)
self.navigationItem.titleView!.widthAnchor.constraint(equalToConstant: view.frame.size.width - cancelbtn.width)

它的外观是rn:UIView

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-01 03:49:24

我解决了我的问题。我没有使用titleView,而是将textfield放在右边的barButtonItem中,并将其宽度设置为view.frame.size.width。这给了我一个占据整个导航的文本字段。我在这里附加了代码,以防有人也想这么做。

代码语言:javascript
复制
searchBar = UISearchBar()
searchBar.showsCancelButton = false
searchBar.placeholder = "Course name"
searchBar.delegate = self
cancelbtn = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CourseTableViewController.searchCancelled))
self.navigationItem.leftBarButtonItem = cancelbtn

searchTextField = UITextField()
searchTextField.borderStyle = .roundedRect
searchTextField.widthAnchor.constraint(equalToConstant: view.frame.size.width - cancelbtn.width)
searchTextField.translatesAutoresizingMaskIntoConstraints = false
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: searchTextField)
self.navigationItem.rightBarButtonItem?.width = view.frame.size.width
票数 0
EN

Stack Overflow用户

发布于 2018-10-01 03:24:01

你应该看看苹果公司关于这方面的指南。在iOS11中,您应该将searchBar安装到navigationItem中。尝试使用以下代码:

代码语言:javascript
复制
import UIKit

class ViewController: UIViewController, UISearchControllerDelegate {

var searchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.prefersLargeTitles = false
    searchController = UISearchController(searchResultsController: nil)
    searchController.delegate = self

    // Customisation 
    searchController.searchBar.tintColor = .black
    searchController.dimsBackgroundDuringPresentation = false

    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
}

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52583871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档