UISearchBar表部分索引标题重叠

时间:2010-01-14 21:08:20

标签: iphone cocoa-touch uitableview uisearchbar

当UISearchBar位于表头内时,如何更改UISearchBar的宽度,以使截面索引不与文本字段重叠?我想重新创建您在手机应用的联系人视图中找到的相同布局。

3 个答案:

答案 0 :(得分:5)

一种可能的解决方案是向tableHeaderView添加自定义视图。这就是我所做的:

searchBar是我在头文件中声明的UISearchBar。我创建了一个UIView并为整个宽度添加了一个UINavigationBar,并在其上添加了简短的UISearchBar。然后,我最终将UIView分配给tableHeaderView。

searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 290.0, 44.0)];

UIView *customTableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
UINavigationBar *dummyNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[customTableHeaderView addSubview:dummyNavigationBar];
[customTableHeaderView addSubview:searchBar];
[dummyNavigationBar release];

self.tableView.tableHeaderView = customTableHeaderView;
[customTableHeaderView release];

更优雅的解决方案是使用contentStretch属性拉伸UISearchBar。我仍然需要尝试并检查它是否有效。

答案 1 :(得分:1)

您是说屏幕右侧的索引字母的AZ是否超出搜索栏,如此截图所示,“A”和“B”出现在搜索栏的右边缘?

enter image description here

(a)我找不到任何方法来避免这种字母溢出问题。由Scott McCammon在这里回答的方法被Apple禁止(即使那时我也不确定它是否解决了这个问题)。

(b)我在iPod touch(第4代)的iOS 6.0.1中的Apple的 Contacts 应用程序中看到了这种行为。

(c)我认为逻辑上它是一个特征而不是一个bug,因为搜索栏位于表视图的标题中。标题是表视图的一部分,并且像表视图的一部分一样滚动,因此可能有意义地绘制索引字母表,就像它在表视图的其余部分一样。

当您有范围按钮时,此问题会变得更加严重。右侧的示波器按钮没有预留空间,因此索引字母表会在最右侧按钮的顶部绘制。

答案 2 :(得分:0)

如果您使用UISearchDisplayController,则所需行为将自动运行,如this answer中所述。