如何正确alignmentiOS7中的UISearchbar的文本

你能告诉我如何在iOS 7中alignmentUISearchbar文本? ,我在iOS6中使用这个,但现在它不适用于iOS7:

//hacking search bar UITextField *searchField; for (UIView *subview in self.searchBar.subviews) { if ([subview isKindOfClass:[UITextField class]]) { searchField = (UITextField *)subview; break; } } if (searchField) { searchField.textAlignment = NSTextAlignmentRight; } 

现在已经太晚了,但是如果有人仍然想知道解决scheme,那么你可以按照这个方法。

 UITextField *searchTextField = [searchBarController.searchBar valueForKey:@"_searchField"]; 

您可以使用上面的代码获取search字段。 现在只需使用你想使用的属性,如。

 searchTextField.layer.cornerRadius = 10.0f; searchTextField.textAlignment = NSTextAlignmentRight; 

不幸的是,如果不从头开始完全重新实现这个类,就不能安全地完成,因为当用户开始并完成编辑时,文本alignment由对象代码的内部进行调整。

最接近你想要做的是使用三个位置调整水平移动文本,但这不会影响alignment,只有绝对的位置,即使只有当用户input。

如果你想尝试这个,查找searchTestPositionAdjustment,setPositionAdjustment:forSearchBarIcon:和searchFieldBackgroundPositionAdjustment。 我认为这对你来说不是很有用。

-灰

我有这个问题的解决scheme。 这有点哈克,不是很整洁,但它的确有窍门。

由于UISearchBar本身不允许你编辑占位符,所以我在它下面设置了一个UITextField ,并通过这样做来禁用它:

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if([touch.view isDescendantOfView:self.placeHolderTextField]){ return NO; } return YES; } 

注意:不要忘记在你的.h文件中包含<UIGestureRecognizerDelegate> 。 如果这不起作用,你总是可以使用[self.view sendSubViewToBack:self.placeholderTextField];

接下来,我刚刚设置了要显示占位符的事件,而不是。 在viewDidLoad ,我只是调用self.placeHolderTextFiew.placeholder = @"search"

而且,

 -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if(searchText.length > 0){ self.placeHolderTextfield.placeholder = @""; } else{ self.placeHolderTextfield.placeholder = @"search"; } } 

再次注意:确保在你的.h文件中包含<UISearchBarDelegate>以使其工作。

我也使用tableView ,所以当方法DidSelectRowAtIndexPath被调用,我也设置占位符为空string。

希望这可以帮助。

你也可以这样试试.. searchbar.placeholder = @“Hai .. whitespace”;

方法来设置文本alignment

searchbar->属性检查器 – >search文本 – >自定义偏移 – >水平(根据需要设置)

玩UISearchBar的子视图后,我发现这个解决scheme,它适用于iOS 6和iOS 7

 //hacking search bar UITextField *searchField; for (UIView *subview in self.searchBar.subviews) { //this will work in iOS 7 for (id sub in subview.subviews) { if([NSStringFromClass([sub class]) isEqualToString:@"UISearchBarTextField"]) { [sub setTextAlignment:NSTextAlignmentRight]; } } //this will work for less than iOS 7 if ([subview isKindOfClass:[UITextField class]]) { searchField = (UITextField *)subview; break; } } //for less than iOS 7 if (searchField) { searchField.textAlignment = NSTextAlignmentRight; }