iOS 11 UISearchBar in UINavigationBar

后端 未结 7 1002
有刺的猬
有刺的猬 2020-12-04 17:15

I want to place a search bar in the new navigation bar with the new iOS 11 large titles. However, the color of the search bar is automatically applied by iOS and I can\'t ch

相关标签:
7条回答
  • 2020-12-04 17:18

    Try this code,

    UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
    txfSearchField.backgroundColor = [UIColor redColor];
    
    0 讨论(0)
  • 2020-12-04 17:20

    This is the code I used to make the search bar white:

    if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
                if let backgroundview = textfield.subviews.first {
                    backgroundview.backgroundColor = UIColor.init(white: 1, alpha: 1)
                    backgroundview.layer.cornerRadius = 10
                    backgroundview.clipsToBounds = true
                }
            }
    

    0 讨论(0)
  • 2020-12-04 17:22

    This should work for you

    func addSearchbar(){
            if #available(iOS 11.0, *) {
                let sc = UISearchController(searchResultsController: nil)
                let scb = sc.searchBar
                scb.tintColor = UIColor.white
    
                if let navigationbar = self.navigationController?.navigationBar {
                    //navigationbar.tintColor = UIColor.green
                    //navigationbar.backgroundColor = UIColor.yellow
                    navigationbar.barTintColor = UIColor.blue
                }
    
                navigationController?.navigationBar.tintColor = UIColor.green
                navigationItem.searchController = sc
                navigationItem.hidesSearchBarWhenScrolling = false
            }
    }
    


    Result:

    0 讨论(0)
  • 2020-12-04 17:31

    Objective C

    if (@available(iOS 11.0, *)) {
        self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
        self.searchController.searchResultsUpdater = self;
        self.searchController.searchBar.delegate = self;
        self.searchController.dimsBackgroundDuringPresentation = NO;
        self.navigationItem.searchController=self.searchController;
        self.navigationItem.hidesSearchBarWhenScrolling=NO;
        self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
        self.searchController.searchBar.showsBookmarkButton = NO;
        self.searchController.searchBar.placeholder = @"Search";
        self.searchController.searchBar.tintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        self.searchController.searchBar.barTintColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        UITextField *txfSearchField = [self.searchController.searchBar valueForKey:@"_searchField"];
        txfSearchField.tintColor=[UIColor colorWithRed:21/255.0 green:157/255.0 blue:130/255.0 alpha:1];
        txfSearchField.textColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        txfSearchField.backgroundColor=[UIColor whiteColor];
        UIView *backgroundview= [[txfSearchField subviews]firstObject ];
        backgroundview.backgroundColor=[UIColor whiteColor];
        // Rounded corner
        backgroundview.layer.cornerRadius = 8;
        backgroundview.clipsToBounds = true;
    }
    
    0 讨论(0)
  • 2020-12-04 17:31

    Tested on ios 13

    Perfect white background on searchBar

    func setupSearchbarController(){
        if #available(iOS 11.0, *) {
            let sc = UISearchController(searchResultsController: nil)
            sc.delegate = self
            let scb = sc.searchBar
            scb.tintColor = UIColor.white
            scb.barTintColor = UIColor.white
    
            if let textfield = scb.value(forKey: "searchField") as? UITextField {
                textfield.textColor = UIColor.white
                textfield.backgroundColor = UIColor.white
                if let backgroundview = textfield.subviews.first {
    
                    // Background color
                    backgroundview.backgroundColor = UIColor.white
    
                    // Rounded corner
                    backgroundview.layer.cornerRadius = 10;
                    backgroundview.clipsToBounds = true;
                }
            }
    
            if let navigationbar = self.navigationController?.navigationBar {
                navigationbar.barTintColor = AppColor.themeColor
            }
            navigationItem.searchController = sc
            navigationItem.hidesSearchBarWhenScrolling = false
        }
    }
    
    0 讨论(0)
  • 2020-12-04 17:34

    I changed the background of the text field with this code inside AppDelegate.

    Swift 4

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            
            //background color of text field
             UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
            
            }
    

    This is the result

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