UISearchController searchBar showsCancelButton not being respected

后端 未结 12 2314
北荒
北荒 2021-02-13 03:58

I\'ve added a UISearchController to my application and set it\'s searchBar to the titleView of my navigationItem.

This works but I am seeing t

相关标签:
12条回答
  • 2021-02-13 04:15

    It may be helpful to note that this has changed on iOS 13 and quote Apple's documentation on showsCancelButton, currently only available on UISearchBar.h and not on developer.apple.com

    /* New behavior on iOS 13.
     If the search bar is owned by a UISearchController, then using the setter
     for this property (as well as -setShowsCancelButton:animated:) will implicitly
     set the UISearchController's automaticallyShowsCancelButton property to NO.
     */
    

    automaticallyShowsCancelButton has been introduced on iOS 13.0 and should clarify what @pbasdf had already pointed out in his answer: that the buggy behavior is something intrinsic to UISearchController.

    0 讨论(0)
  • 2021-02-13 04:15

    I would also add

    searchController.hidesNavigationBarDuringPresentation = false
    searchController.delegate = self
    searchController.searchBar.delegate = self
    

    See if assigning those delegates will help.

    0 讨论(0)
  • 2021-02-13 04:16

    Easy solution in Swift3 - we need to make CustomSearchBar without cancel button and then override the corresponding property in new CustomSearchController:

    class CustomSearchBar: UISearchBar {
    
    override func setShowsCancelButton(_ showsCancelButton: Bool, animated: Bool) {
        super.setShowsCancelButton(false, animated: false)
    }}
    
    
    class CustomSearchController: UISearchController {
    
    lazy var _searchBar: CustomSearchBar = {
        [unowned self] in
        let customSearchBar = CustomSearchBar(frame: CGRect.zero)
        return customSearchBar
        }()
    
    override var searchBar: UISearchBar {
        get {
            return _searchBar
        }
    }}
    

    In MyViewController I initialize and configure searchController using this new custom subclass:

        var mySearchController: UISearchController = ({
        // Display search results in a separate view controller
        //        let storyBoard = UIStoryboard(name: "Main", bundle: Bundle.main)
        //        let alternateController = storyBoard.instantiateViewController(withIdentifier: "aTV") as! AlternateTableViewController
        //        let controller = UISearchController(searchResultsController: alternateController)
        let controller = CustomSearchController(searchResultsController: nil)
        controller.searchBar.placeholder = NSLocalizedString("Enter keyword (e.g. iceland)", comment: "")
        controller.hidesNavigationBarDuringPresentation = false
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.searchBarStyle = .minimal
        controller.searchBar.sizeToFit()
        return controller
    })()
    
    0 讨论(0)
  • 2021-02-13 04:25

    What about setting it with [searchBar setShowsCancelButton:NO animated:NO];

    https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchBar_Class/#//apple_ref/occ/instm/UISearchBar/setShowsCancelButton:animated:

    0 讨论(0)
  • 2021-02-13 04:27

    my solution was to set the attribute every time anew when I used the searchcontroller respectively its searchbar. I initialized the searchcontroller lazily without setting the attribute and then did

    searchController.searchBar.showsCancelButton = false
    

    every time before search began. You could do this in the UISearchControllerDelegate methods i.e...

    0 讨论(0)
  • 2021-02-13 04:31

    This appears to be a bug in iOS. The same behavior I've described can be seen in the example project supplied by Apple

    https://developer.apple.com/library/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html

    The documentation states that the default for this is NO but this doesn't seem to be the case. Setting showsCancelButton to NO seems to have no effect.

    I have filed a radar for this and am waiting to hear back.

    0 讨论(0)
提交回复
热议问题