【问题标题】:iOS8 UISearchBar in UIToolbar has no left paddingUIToolbar中的iOS8 UISearchBar没有左填充
【发布时间】: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 上正常工作

【问题讨论】:

    标签: uitableview ios8 uisearchbar uitoolbar


    【解决方案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 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多