Как добавить 1 пиксель серой границы вокруг UISearchBar TextField

Я пытаюсь понять, как добавить 1-мерную серию в 1 пиксель к моему UISearchBar в моем приложении. Приложение Facebook Messenger выполняет это достаточно хорошо. (см. рис. ниже).

Я знаю, что есть свойство background image для UISearchBar, но я считаю, что это неправильно использовать, поскольку он растягивает изображение и повторяет его по всему виду панели поиска.

Я очень ценю указатели в правильном направлении.

enter image description here

Ответ 1

Попробуйте этот код:

//First add the following import and macro:
#import <QuartzCore/QuartzCore.h>
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

//Then change yourSearchBar border: 
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    for (id object in [[[yourSearchBar subviews] objectAtIndex:0] subviews])
    {
        if ([object isKindOfClass:[UITextField class]])
        {
            UITextField *textFieldObject = (UITextField *)object;
            textFieldObject.layer.borderColor = [[UIColor grayColor] CGColor];
            textFieldObject.layer.borderWidth = 1.0;
            break;
        }
    }
}
else
{
    for (id object in [yourSearchBar subviews])
    {
        if ([object isKindOfClass:[UITextField class]])
        {
            UITextField *textFieldObject = (UITextField *)object;
            textFieldObject.layer.borderColor = [[UIColor grayColor] CGColor];
            textFieldObject.layer.borderWidth = 1.0;
            break;
        }
    }
}

Ответ 2

версия Swift 3

override func viewDidLoad() {
    super.viewDidLoad()

    for s in searchBar.subviews[0].subviews {
        if s is UITextField {
            s.layer.borderWidth = 1.0
            s.layer.borderColor = UIColor.gray.cgColor
        }
    }
}

Чтобы сделать это, вы можете использовать свойство textField.layer.cornerRadius

Ответ 3

Эта работа прекрасна:

UITextField *txtSearchField = [yourSearchBar valueForKey:@"_searchField"];
[txtSearchField setBorderStyle:UITextBorderStyleRoundedRect];
txtSearchField.layer.cornerRadius = 4;
txtSearchField.layer.borderWidth = 1.0f;
txtSearchField.layer.borderColor = [[UIColor colorWhatYouWant] CGColor]; 

не забывайте #import <QuartzCore/QuartzCore.h>

Ответ 4

попробуйте это

self.poundsTxt.layer.borderColor = [[UIColor whiteColor]CGColor];
self.poundsTxt.layer.borderWidth=2.0;

импортируйте ссылку Quartz Core Framework в свой проект и добавьте import <QuartzCore/QuartzCore.h> к вашему ViewController.m для работы borderColor и borderWidth.