我有一个包含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
答案 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;
}
}];
}