UIToolbar中的iOS8 UISearchBar没有左侧填充

时间:2014-10-01 15:09:29

标签: uitableview ios8 uisearchbar uitoolbar

我有一个包含UITableView的UIViewController类。在表视图标题中,我有一个UIToolbar,其中包含一个UISearchBar。在iOS8中,当我点击搜索栏进行搜索时,搜索显示控制器会按预期将栏移动到屏幕顶部,但搜索栏在左侧没有边距。

重现的代码最简单如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, [self tableView].frame.size.width, 44.0)];

    if ([toolbar respondsToSelector:@selector(setBarTintColor:)]) {
        [toolbar setBarTintColor:[UIColor lightGrayColor]];
    }

    [[self tableView] setTableHeaderView:toolbar];

    UIView *searchBarView = [[UIView alloc] initWithFrame:[[[self searchDisplayController] searchBar] frame]];

    [[[self searchDisplayController] searchBar] setBackgroundImage:[[UIImage alloc] init]];
    [searchBarView addSubview:[[self searchDisplayController] searchBar]];
    [[[self searchDisplayController] searchBar] setText:@""];
    UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBarView];

    [toolbar setItems:@[searchBarItem]];
}

非常感谢任何帮助/建议。

编辑:这适用于iOS 6.1和7.0 / 1

1 个答案:

答案 0 :(得分:0)

它似乎是一个iOS8错误。 您可以使用this

中的临时解决方案

基本上,您可以创建UIToolbar的子类。 然后在刚创建的子类中,添加此代码以追加缺少的空格:

#define DEFAULT_APPLE_PADDING 20.0f
-(void)layoutSubviews{
    [super layoutSubviews];
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
        if ([NSStringFromClass(view.class) hasPrefix:@"UIToolbar"] &&
            [NSStringFromClass(view.class) hasSuffix:@"Button"]) {
            CGRect buttonFrame = view.frame;

            if (buttonFrame.origin.x == 0) {
                buttonFrame.origin.x = DEFAULT_APPLE_PADDING;
            } else if (buttonFrame.origin.x + buttonFrame.size.width == self.bounds.size.width) {
                buttonFrame.origin.x -= DEFAULT_APPLE_PADDING;
            }

            view.frame = buttonFrame;
        }
    }];
}