2

我有一个UISearchBar平原:titleViewUINavigationBar

搜索栏

当用户开始搜索时,会显示取消按钮:

- (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 必须是可拉伸的图像”,但是让取消按钮占据那么多屏幕空间感觉像是一种浪费(特别是因为我还想添加一个左栏项目)。

我可以通过迭代子视图来解决这个问题,但我更喜欢使用外观代理方法。所以问题是,当你自定义了它的外观后,为什么取消按钮会变得如此宽泛。

4

0 回答 0