How to set UiSearchBar Search icon on the right side in swift
Solution 1
Try This , and call on viewDidLayoutSubviews()
func SearchText(to searchBar: UISearchBar, placeHolderText: String) {
searchBar.barTintColor = UIColor.clear
searchBar.backgroundColor = UIColor.clear
searchBar.isTranslucent = true
searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
let searchTextField:UITextField = searchBar.value(forKey: "searchField") as? UITextField ?? UITextField()
searchTextField.layer.cornerRadius = 15
searchTextField.textAlignment = NSTextAlignment.left
let image:UIImage = UIImage(named: "search")!
let imageView:UIImageView = UIImageView.init(image: image)
searchTextField.leftView = nil
searchTextField.font = UIFont.textFieldText
searchTextField.attributedPlaceholder = NSAttributedString(string: placeHolderText,attributes: [NSAttributedString.Key.foregroundColor: UIColor.yourCOlur])
searchTextField.rightView = imageView
searchTextField.backgroundColor = UIColor.yourCOlur
searchTextField.rightViewMode = UITextField.ViewMode.always
}
Solution 2
In ViewController, leftview of searchbar textfield is the actual search icon, so make it to nil and create a image view with custom icon and set as a right view of search textfield.
Objective C
@interface FirstViewController ()
{
UISearchBar *searchBar;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
searchBar = [[UISearchBar alloc] init];
searchBar.frame = CGRectMake(15, 100, 350,50);
[self.view addSubview:searchBar];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UITextField *searchTextField = [((UITextField *)[searchBar.subviews objectAtIndex:0]).subviews lastObject];
searchTextField.layer.cornerRadius = 15.0f;
searchTextField.textAlignment = NSTextAlignmentLeft;
UIImage *image = [UIImage imageNamed:@"search"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
searchTextField.leftView = nil;
searchTextField.placeholder = @"Search";
searchTextField.rightView = imageView;
searchTextField.rightViewMode = UITextFieldViewModeAlways;
}
Swift
private var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
searchBar = UISearchBar()
searchBar.frame = CGRect(x: 15, y: 100, width: 350, height: 50)
self.view.addSubview(searchBar)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let searchTextField:UITextField = searchBar.subviews[0].subviews.last as! UITextField
searchTextField.layer.cornerRadius = 15
searchTextField.textAlignment = NSTextAlignment.left
let image:UIImage = UIImage(named: "search")!
let imageView:UIImageView = UIImageView.init(image: image)
searchTextField.leftView = nil
searchTextField.placeholder = "Search"
searchTextField.rightView = imageView
searchTextField.rightViewMode = UITextFieldViewMode.always
}
Solution 3
Here is the complete search view customization with the storyboard in swift 5 and ios 13 or above
@IBOutlet weak var searchview: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
//make background vertical line
searchview.backgroundImage = UIImage()
if #available(iOS 13.0, *) {
let searchTextField:UITextField = searchview.searchTextField
searchTextField.textAlignment = .left
searchTextField.layer.cornerRadius = 20
searchTextField.layer.masksToBounds = true
searchTextField.rightView = nil
//your custom icon here
let image:UIImage = UIImage(named: "Search")!
let imageV:UIImageView = UIImageView.init(image: image)
searchTextField.rightView = nil
searchTextField.placeholder = "Search"
searchTextField.leftView = imageV
//dafault search icon
let imageV = searchTextField.leftView as! UIImageView
imageV.image = imageV.image?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
imageV.tintColor = UIColor.lightGray
}
}
Comments
-
iOS dev almost 2 years
I am working on Swift.
As regular SearchBar By default its appearing like Following Pic(1).
But as per our design requirement I need to change it as Following Pic(2).
I tried using the following code I got like Following Pic(3)
**When I tried the following code the right view is getting hide and I could not able to see the text field rightview
Search icon completely invisible**
let searchField = (searchBar.valueForKey("_searchField") as! UITextField) searchField.layer.cornerRadius = 15; let searchIcon = searchField.leftView! if (searchIcon is UIImageView) { print("yes") } searchField.rightView = searchIcon searchField.leftViewMode = .Never searchField.rightViewMode = .Always
Can anyone help me to get the requirement. I can understand if you provide even on objective C as well
-
Jerome over 4 yearsWe have to set up searchTextField after viewDidLayoutSubviews(), but I don't know why. It seems searchTextField will cover your configuration set before viewDidLayoutSubviews().
-
Threadripper over 3 yearsAdding following code to viewDidLayoutSubviews() works for me thanks!