如何更改UISearchBar中的UITextField位置?

时间:2011-07-22 15:42:17

标签: iphone objective-c uitextfield uisearchbar

有没有办法在UISearchBar中重新定位UITextField? 我想在UISearchBar中稍微移动UITextField。

2 个答案:

答案 0 :(得分:12)

UITextField方法不再起作用,可能是由于UISearchBar对象的重新定位。当UITextBar在屏幕上显示时,UISearchBar会调整其大小,这会使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参数中指示的CGRect调整UISearchBar的anInsets(实际上是UITextField)。父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)
}

答案 1 :(得分:2)

快速4 +

您可以尝试一下。

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

它不会移动textField,但会移动文本。对于大多数人来说,这应该足够了。