Как я могу изменить позицию UITextField в UISearchBar? - PullRequest
7 голосов
/ 22 июля 2011

Есть ли способ изменить положение UITextField внутри UISearchBar? Я бы хотел немного переместить UITextField в UISearchBar.

Ответы [ 2 ]

13 голосов
/ 16 января 2012

Подход UITextField больше не работает, возможно, из-за рестайлинга объекта UISearchBar.UISearchBar изменяет размер своего UITextField, когда он представлен на экране, это делает недействительными все манипуляции с UITextField.

Однако я обнаружил, что UISearchBar отвечает на метод setContentInset: (протестирован на iOS 5.0.1).Он корректирует расстояние вставки от вмещающего представления.

Это приводит к сложному подходу, включающему NSInvocation:

if([aSearchBar respondsToSelector:@selector(setContentInset:)])
{
    SEL aSelector = NSSelectorFromString(@"setContentInset:");
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[aSearchBar methodSignatureForSelector:aSelector]];

    [inv setSelector:aSelector];
    [inv setTarget:aSearchBar];
    UIEdgeInsets anInsets = UIEdgeInsetsMake(5, 0, 5, 35);
    [inv setArgument:&anInsets atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
    [inv invoke];
}

Приведенный выше код изменяет размер contentInset UISearchBar (фактически UITextField), используяCGRect указывается в параметре anInsets.Родительское выражение if (respondsToSelector:) избавляет вас от изменений этого поведения в новых версиях iOS.

Обновлено для Swift3 и iOS10:

if searchBar.responds(to: Selector("setContentInset:")) {
   let aSelector = Selector("setContentInset:")
   let anInset = UIEdgeInsetsMake(5, 0, 5, 35)
   searchBar.perform(aSelector, with: anInset)
}
3 голосов
/ 12 августа 2018

Swift 4 +

Вы можете попробовать это.

searchBar.searchTextPositionAdjustment = UIOffset(horizontal: 5, vertical: 0)

Он не перемещает текстовое поле, но перемещает текст.Этого должно быть достаточно для большинства людей.

...