2011-07-22 111 views

回答

12

的UITextField做法是不工作了,可能是由於物體的UISearchBar的改型。 UISearchBar在其顯示在屏幕上時調整其UITextField的大小,這會使UITextField上的所有操作無效。

不過,我發現的UISearchBar響應setContentInset:方法(在iOS 5.0.1測試)。它調整封閉視圖的插入距離。

該結果在涉及NSInvocation的一個複雜的方法:在使用的CGRect

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]; 
} 

上面的代碼大小調整的UISearchBar(有效的UITextField)的contentInsetanInsets參數指示。父級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

工程就像一個魅力。例如,要留下一定的空間和權利,使用上面: 'UIEdgeInsets anInsets = UIEdgeInsetsMake(5,50/*左*/5,50/*權* /);' – ecotax

+0

我發現,如果你離開頂部和底部的插圖爲0,它應用默認插入。設置爲5,但當我選擇導致它移動到搜索欄頂部的文本字段時發生。 – Jonah

+0

此代碼是否會從AppStore中拒絕您的應用程序?除此之外,它的確,工作就像一個魅力 –