UIToolbar中的iOS8 UISearchBar没有左填充

Posted

技术标签:

【中文标题】UIToolbar中的iOS8 UISearchBar没有左填充【英文标题】:iOS8 UISearchBar in UIToolbar has no left padding 【发布时间】:2014-10-01 15:09:29 【问题描述】:

我有一个包含 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】:

这似乎是一个 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;
        
    ];

【讨论】:

如果这些链接被破坏,仅引用外部链接的答案将变得过时。请包含一些说明和代码,说明链接中的内容如何帮助回答 OP 的问题。

以上是关于UIToolbar中的iOS8 UISearchBar没有左填充的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中半透明的 UIToolbar 上挖一个洞

在 iOS8 中调整旋转工具栏的大小

未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到

如何使 UINavigationController 中的 UIToolbar 更高?

UIToolbar 中的 UISearchBar 不会显示取消按钮

如何在 UIToolbar 中的 UIProgressView 上方添加标签?