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没有左填充的主要内容,如果未能解决你的问题,请参考以下文章
未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到
如何使 UINavigationController 中的 UIToolbar 更高?