如何在 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 搜索栏占位符文本对齐问题

如何在 iOS7 中更改 UISearchBar 的背景颜色

如何在iOS7中更改UISearchBar的取消按钮的textColor?

如何在 iOS7 中更改 UISearchBar 的 inputView?

如何对齐 3 个 div 左中右? [复制]

如何在 ImGui Columns 中右对齐文本?