UISearchBar显示错误:文本太远,与放大镜图标重叠

时间:2011-04-02 21:34:48

标签: ios objective-c uisearchbar

我遇到了UISearchBar最奇怪的显示错误 这是我的代码在另一个应用程序中完美运行。 (我在代码中创建搜索栏,因为xib文件不可行。)

searchBar = [[UISearchBar alloc] initWithFrame:
    CGRectMake(0, 0, self.tableView.frame.size.width, 44)];
searchBar.delegate = self;
searchController = [[UISearchDisplayController alloc] 
                   initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
self.tableView.tableHeaderView = searchBar;

搜索功能等正常。但奇怪的是,搜索栏在设备和模拟器上都是这样的:

UISearchBar with display bug

  • 占位符字符串不应该在那里,而是在右边。
  • 当我输入搜索文本时,它也会向左开始,显示放大镜图标。
  • 此外,将searchBar.placeholdersearchBar.prompt设置为@""nil不会删除此“搜索”占位符。 (但是,a searchBar.placeholder = @"FooBar";
    将显示“FooBar”,但仍处于错误的位置。
  • 最后,我觉得奇怪的是字符串是“搜索”,虽然我已经将语言设置为其他东西(例如德语)。

有任何帮助吗?最迫切的问题是让文本在右边。

1 个答案:

答案 0 :(得分:19)

覆盖(CGRect)editingRectForBounds:(CGRect)bounds- (CGRect)textRectForBounds:(CGRect)bounds可能会导致此行为。您是否更改了应用中其他位置UITextField类别中的任何一个?这样做的目的可能是在文本字段中添加填充(可以使用不可见的leftView来完成)。在这种情况下,您的自定义“填充”将应用于UISearchBar文本字段。

UITextField上的此类别也会导致您的应用在初始化使用UITextField的框架类时崩溃,例如MFMailComposeViewController,因此出于多种原因这是个坏主意。< / p>