我有一个UISearchBar
平原:titleView
UINavigationBar
当用户开始搜索时,会显示取消按钮:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:YES animated:YES];
return YES;
}
看起来像这样:
现在我想自定义外观并使用不同的取消按钮:
id appearance = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
[appearance setTitle:@""];
[appearance setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:[UIImage imageNamed:@"cancel_pressed.png"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
结果如下所示:
我的自定义取消按钮大约 60 像素宽,但不知何故被拉伸到超过 80 像素。的文档setBackgroundImage:forState:barMetrics:
确实提到“为了获得良好的结果,backgroundImage 必须是可拉伸的图像”,但是让取消按钮占据那么多屏幕空间感觉像是一种浪费(特别是因为我还想添加一个左栏项目)。
我可以通过迭代子视图来解决这个问题,但我更喜欢使用外观代理方法。所以问题是,当你自定义了它的外观后,为什么取消按钮会变得如此宽泛。