7

不知道为什么,我在 iOS 7 中的搜索栏留下了正确的空间。在 iOS 6 中没问题。

我知道它与部分索引有关,因为如果我删除它,空间就会消失,但我不知道如何修复它。有什么想法吗?

在此处输入图像描述

4

10 回答 10

7

将您的 UISearchBar 嵌入到 UIView 中,然后将其添加为 tableHeaderView。在故事板中以这种方式构建它对我有用。我猜 iOS 会在 tableHeaderView 中调整 UISearchBar 的大小,但只留下一个基本的 UIView(并且不费心去查看它)。

您可能还想让部分索引透明,我这样做了:

[[UITableView appearance] setSectionIndexBackgroundColor:[UIColor clearColor]];
[[UITableView appearance] setSectionIndexTrackingBackgroundColor:[UIColor clearColor]];
于 2013-10-10T00:30:20.733 回答
6

在出现更好的答案之前,我只是手动更改了搜索栏的框架,如下所示:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];        

    CGRect barFrame = self.searchBar.frame;
    barFrame.size.width = self.view.bounds.size.width;
    self.searchBar.frame = barFrame;

}
于 2013-10-03T10:07:41.783 回答
4

在使用 SearchDisplayController 时,我在 iPhone 6/ 6Plus 上遇到了同样的问题。(使用斯威夫特)

我尝试设置搜索栏的框架,但没有运气,但我注意到如果我点击 UISearchBar 的 textField 然后取消它,那么它将采用适当的视图大小。因此,我设法通过使用搜索在 viewController 的 ViewDidLoad 中调用以下代码来解决此问题。

self.searchController.setActive(true, animated: false)
self.searchController.setActive(false, animated: false)
于 2015-02-09T11:13:01.017 回答
3
self.contactsTableView.sectionIndexBackgroundColor = [UIColor clearColor];

白色边缘的原因是因为您的索引层具有白色背景并且位于搜索栏的顶部。这应该足够了。

于 2015-06-19T19:11:23.867 回答
2

在此处输入图像描述

在 UIView 中添加搜索栏作为 tableView 的标题视图。将 tableview 设置sectionIndexBackgroundColor为清除颜色,因为它覆盖了标题。

使用 iOS 7、7.1 测试;

于 2014-05-01T06:06:20.757 回答
1

因为 table view 总是在 section Indexes View 的右边留下 15px,所以你应该在重新加载 table view 后调整 Seach bar 的大小

第一的:

self.tblData.sectionIndexBackgroundColor = [UIColor clearColor]; //(iOS >= 7 only)

作弊时间:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{

    [self performSelector:@selector(resizeSearchBar) withObject:nil afterDelay:0.01];
}
- (void) resizeSearchBar
{
    CGRect frame = self.searchBar.frame;
    if (frame.size.width < self.tblData.frame.size.width) {
        frame.size.width = self.tblData.frame.size.width;
    }
    self.searchBar.frame = frame;
}
- (void) reloadTableData // call it anytime you want to reload table view
{
    [self.tblData reloadData];
    [self performSelector:@selector(resizeSearchBar) withObject:nil afterDelay:0.01];
}

建议 不要像我一样作弊,只需做更简单的方法:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal; // iOS >= 7 only
于 2013-10-04T03:23:42.880 回答
0

我还在我的应用程序中附加了一个UISearcBar,即使我的应用程序也支持旋转也没有任何问题。

您可以尝试删除并重新创建UISearchBarstoryboard/xib

于 2013-10-03T09:53:41.313 回答
0

我将搜索栏添加为顶级视图的子视图,而不是表格视图。使用自动布局将搜索栏固定到顶部指南,并且搜索栏和表格视图之间的垂直空间约束为 0。

于 2014-03-18T16:54:47.763 回答
0

该方法的公认解决方案viewDidLayoutSubviews使屏幕闪烁。相反,我所做的是创建一个UISearchBar简单的子类:

FullWidthSearchBar.h:

@interface FullWidthSearchBar : UISearchBar
@end

FullWidthSearchBar.m:

#import "FullWidthSearchBar.h"
@implementation FullWidthSearchBar

- (void)setFrame:(CGRect)frame {
    frame.size.width = self.superview.bounds.size.width;
    [super setFrame:frame];
}

@end

然后我将该类分配给我的 xib 上的搜索栏:

在此处输入图像描述

于 2014-11-06T10:31:53.430 回答
0

问题是右边的白色块,所以如果我们将块颜色更改为与搜索栏背景相同,它看起来很正常。

只是

if (IOS7) {
    self.tableview.backgroundColor = [UIColor colorWithPatternImage:self.searchBar.backgroundImage];
}
于 2015-05-20T10:15:09.413 回答