我希望我的搜索栏将其背景绘制在状态栏下方向上延伸,如下所示:
这是上图对应的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchBar = [[UISearchBar alloc] init];
self.searchBar.delegate = self;
[self.view addSubview:self.searchBar];
self.searchBar.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *views = @{@"v":self.searchBar,
@"topLayoutGuide":self.topLayoutGuide};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topLayoutGuide][v]" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views:views]];
[self.searchBar setBackgroundImage:[UIImage imageNamed:@"searchbarBG"] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault];
}
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
当我将搜索栏添加到UISearchDisplayController
通过在末尾添加以下行viewDidLoad
method:
self.mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
这是我得到的结果:
请注意,图像看起来被剪裁了。这与我在代码中将 UIBarPositionTopAttached 更改为 UIBarPositionTop 的情况不同:
被剪裁的图像让我想起clipsToBounds
我可以通过在末尾添加这段代码来使搜索栏正确显示viewDidLoad
:
for (UIView *subview in self.searchBar.subviews) {
subview.clipsToBounds = NO;
}
所以我猜UISearchDisplayController
正在搞乱clipsToBounds
的财产UISearchBar
背景视图。还有其他人为此苦苦挣扎吗?我的代码有问题吗?
Update:
早在 2013 年 10 月,除了发布这个问题之外,我还使用 Apple Bug Reporter 工具报告了这个问题。 2015 年 1 月 6 日(太晚了)我收到了 Apple 开发者关系部门的回复:
基于以下原因,没有计划解决此问题:
不再支持 UISearchDisplayController。所需
UISearchController 应该具有该功能,如果没有
(或者行为不正确),请提交新的错误。
我们现在即将结束这份报告。
如果您对该决议有疑问,或者这仍然是一个
对您来说是关键问题,那么请更新您的错误报告
信息。
请务必定期检查新的 Apple 版本是否有任何更新
这可能会影响这个问题。