How to customize appearance of UISearchBar

后端 未结 9 1706
盖世英雄少女心
盖世英雄少女心 2020-12-04 09:53

I want to customize the search bar, I mean the white box. Can I do it? Is there some documentation about that? Is there a way to hide the white box, but not the letters. Can

相关标签:
9条回答
  • 2020-12-04 10:14

    By IOS 5.0 you have the chance to use

      [[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"searchbar.png"]forState:UIControlStateNormal];
    
    0 讨论(0)
  • 2020-12-04 10:14

    use the below code to transparent your searchbar

    // Set it to your UISearchBar appearance
    
    [[UISearchBar appearance] setBackgroundColor:[UIColor clearColor]];
    [[UISearchBar appearance] setBackgroundImage:backgroundImage];
    [[UISearchBar appearance] setSearchFieldBackgroundImage:searchFieldImage 
                                                    forState:UIControlStateNormal];
    
    0 讨论(0)
  • 2020-12-04 10:17
    // Search Bar Customization
    // Background Image
    [self.searchDisplayController.searchBar setBackgroundImage:[[UIImage alloc]init]];
    
    // Backgroud Color
    [self.searchDisplayController.searchBar setBackgroundColor:[UIColor redColor]];
    
    // Search Bar Cancel Button Color
    [[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
    
    // set Search Bar Search icon
    [self.searchDisplayController.searchBar setImage:[UIImage imageNamed:@"search_ico.png"]
                                    forSearchBarIcon:UISearchBarIconSearch
                                               state:UIControlStateNormal];
    
    // set Search Bar textfield background image
     [[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"search_box.png"]
                                                    forState:UIControlStateNormal];
    
    // set Search Bar texfield corder radius
    UITextField *txfSearchField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"];
    txfSearchField.layer.cornerRadius = 10.8f;
    
    0 讨论(0)
  • 2020-12-04 10:19

    Here is the solution I was looking for: Subclassing a UISearchBar, & overwriting the method layoutSubviews

    - (void)layoutSubviews {
       UITextField *searchField;
       NSUInteger numViews = [self.subviews count];
       for(int i = 0; i < numViews; i++) {
          if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) { //conform?
            searchField = [self.subviews objectAtIndex:i];
          }
       }
       if(!(searchField == nil)) {
           searchField.textColor = [UIColor whiteColor];
           [searchField setBackground: [UIImage imageNamed:@"buscador.png"] ];
           [searchField setBorderStyle:UITextBorderStyleNone];
       }
    
       [super layoutSubviews];
    }
    
    0 讨论(0)
  • 2020-12-04 10:19

    Some examples in Swift

    UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).defaultTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]
            UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "", attributes: [NSForegroundColorAttributeName : UIColor.whiteColor()])
            UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.whiteColor()
    
      UISearchBar.appearance().setImage(UIImage(named: "searchBarSearchIcon"), forSearchBarIcon: UISearchBarIcon.Search, state: UIControlState.Normal)
            UISearchBar.appearance().setImage(UIImage(), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
    
    0 讨论(0)
  • 2020-12-04 10:28

    There're few attempts out there including subclass UISearchBar and hack it's layoutSubviews or drawLayer:. After iOS 5, the best method is to use UIAppearance.

    // Configure your images
    UIImage *backgroundImage = [UIImage imageNamed:@"searchbar"];
    UIImage *searchFieldImage = [[UIImage imageNamed:@"searchfield"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];
    
    // Set it to your UISearchBar appearance
    [[UISearchBar appearance] setBackgroundImage:backgroundImage];
    [[UISearchBar appearance] setSearchFieldBackgroundImage:searchFieldImage forState:UIControlStateNormal];
    
    0 讨论(0)
提交回复
热议问题