有没有办法在UISearchBar中重新定位UITextField? 我想在UISearchBar中稍微移动UITextField。
答案 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,但会移动文本。对于大多数人来说,这应该足够了。