如何在 iOS7 中右对齐 UISearchbar 的文本
Posted
技术标签:
【中文标题】如何在 iOS7 中右对齐 UISearchbar 的文本【英文标题】:How to right align text of UISearchbar in iOS7 【发布时间】:2013-10-24 01:18:45 【问题描述】:你能告诉我如何在 ios 7 中右对齐 UISearchbar 文本吗? ,我在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;
【问题讨论】:
【参考方案1】:不幸的是,如果不从头开始完全重新实现类,则无法安全地完成此操作,因为当用户开始和完成编辑时,对象代码的内部会调整文本对齐方式。
与您想要做的最接近的事情是使用三个位置调整来水平移动文本,但这不会影响对齐,只会影响绝对位置,即使这样也只会在用户键入时影响。
如果您想尝试此操作,请查找 searchTestPositionAdjustment、setPositionAdjustment:forSearchBarIcon: 和 searchFieldBackgroundPositionAdjustment。不过我认为它对你没有多大用处。
-灰
【讨论】:
【参考方案2】:为时已晚,但如果有人仍然想知道解决方案,那么你可以按照这个。
UITextField *searchTextField = [searchBarController.searchBar valueForKey:@"_searchField"];
您可以使用上述代码获取搜索字段。现在只需使用您要使用的属性,例如。
searchTextField.layer.cornerRadius = 10.0f;
searchTextField.textAlignment = NSTextAlignmentRight;
【讨论】:
【参考方案3】:我有办法解决这个问题。这有点hacky,也不是很整洁,但它可以解决问题。
由于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
方法时,我还将占位符设置为空字符串。
希望这会有所帮助。
【讨论】:
【参考方案4】:你也可以这样试试.. searchbar.placeholder = @"嗨..空格";
【讨论】:
首先,这会将文本“Hai”推到左边,而不是右边。其次,您永远无法完全正确,因为“空格”字符的宽度超过一个像素。第三,您必须在用户键入时动态添加和删除空格,这将导致文本以难看的方式来回摆动。最后,它只会影响占位符文本。一旦用户开始在该字段中输入内容,文本就会自行左对齐。 他要求右对齐而不是左对齐,占位符仅用于提示而不是真实文本。【参考方案5】:设置文本右对齐的方法
搜索栏->属性检查器->搜索文本->自定义偏移量->水平(按要求设置)
【讨论】:
【参考方案6】:在玩了 UISearchBar 的子视图后,我发现了这个解决方案,它适用于 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;
【讨论】:
那是因为 UISearchBarTextField 不是搜索栏的直接子视图。您可以通过递归搜索类来检索它并设置其正确的文本对齐方式,但这是不好的做法。如果 Apple 再次更改类视图层次结构,它可能会中断。在任何情况下,它只会在输入文本时设置文本的对齐方式。占位符仍将居中,图标仍将左对齐。 我在获取子视图之前递归地执行此操作,然后获取子视图的子视图,直到我到达 textView。但正如@Ash 所说,它将来可能会中断。以上是关于如何在 iOS7 中右对齐 UISearchbar 的文本的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS7 中更改 UISearchBar 的背景颜色
如何在iOS7中更改UISearchBar的取消按钮的textColor?