iOS 7 UISearchBar正确间距

时间:2013-10-03 09:32:44

标签: ios objective-c ios7 uisearchbar

不知道为什么,我在iOS 7中的搜索栏正在留下一个合适的空间。它在iOS 6中没问题。

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

enter image description here

10 个答案:

答案 0 :(得分:7)

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

你可能还想让部分索引透明,我用它做了:

[[UITableView appearance] setSectionIndexBackgroundColor:[UIColor clearColor]];
[[UITableView appearance] setSectionIndexTrackingBackgroundColor:[UIColor clearColor]];

答案 1 :(得分:6)

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

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];        

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

}

答案 2 :(得分:4)

使用SearchDisplayController时,iPhone 6 / 6Plus也遇到了同样的问题。 (使用Swift)

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

self.searchController.setActive(true, animated: false)
self.searchController.setActive(false, animated: false)

答案 3 :(得分:3)

 <application
    android:label="YOUR NAME APP"
    android:allowBackup="true"
    android:icon="@drawable/logo">

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

答案 4 :(得分:2)

enter image description here

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

使用iOS 7,7.1进行测试;

答案 5 :(得分:1)

因为表格视图在索引视图部分的右侧总是留下15px,所以你应该在重新加载表格视图后重新调整搜索栏的大小

<强>首先

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

答案 6 :(得分:0)

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

您可以尝试在UISearchBar

中删除并重新创建storyboard/xib

答案 7 :(得分:0)

我将搜索栏添加为顶级视图的子视图,而不是表视图。使用autolayout将搜索栏固定到顶部向导,并在搜索栏和表视图之间使用垂直空间约束0。

答案 8 :(得分: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上的搜索栏:

enter image description here

答案 9 :(得分:0)

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

只是

if (IOS7) {
    self.tableview.backgroundColor = [UIColor colorWithPatternImage:self.searchBar.backgroundImage];
}