当 UISearchBar 位于表头内时,如何更改其宽度,以使部分索引不与文本字段重叠?我想重新创建您在电话应用程序的联系人视图中找到的相同布局。
3 回答
一种可能的解决方案是将自定义视图添加到 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。我仍然必须尝试并检查它是否有效。
您的意思是屏幕右侧的索引字母的 AZ 超出了搜索栏,如此屏幕截图所示,“A”和“B”出现在搜索栏的右边缘?
(a) 我找不到任何方法来避免这个字母溢出问题。由 Scott McCammon 的回答链接的方法被苹果公司禁止(即使那样我也不确定它是否能解决这个问题)。
(b) 我在我的 iPod touch(第 4 代)上的 iOS 6.0.1中的 Apple通讯录应用中看到了这种行为。
(c) 我想从逻辑上讲它是一个功能而不是一个错误,因为搜索栏位于表格视图的标题中。标题是表格视图的一部分,并且像表格视图的一部分一样滚动,因此可能像在表格视图的其余部分上一样绘制索引字母表是有意义的。
当您有范围按钮时,这个问题变得更加严重。右侧没有为范围按钮保留空间,因此索引字母表绘制在最右侧按钮的顶部。
如果您使用 UISearchDisplayController,所需的行为将自动工作,如本答案中所述。