将 UISearchBar 取消按钮更改为图标

art*_*ras 5 objective-c uibarbuttonitem uisearchbar ios uisearchcontroller

我想将UISearchBarCancel按钮更改为只有图像而没有文本的按钮。这就是我远离原始行为的地方

在此输入图像描述

对此

在此输入图像描述

朝着正确的方向迈出了一步,但问题是按钮太宽了。当我调试视图时,我可以看到它的左侧和右侧有 11 个点的按钮标签插入。有谁知道如何使按钮适合内容大小?图像是正方形的。

这是我的自定义按钮的代码:

UIBarButtonItem *barButtonAppearanceInSearchBar;

if (IOS9) {
    barButtonAppearanceInSearchBar = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]];
} else {
    barButtonAppearanceInSearchBar = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
}

barButtonAppearanceInSearchBar.image = [UIImage imageNamed:@"Close"];
barButtonAppearanceInSearchBar.title = nil;
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的问题是,当我关闭搜索栏并再次激活它时,按钮图像变暗(它仍然存在,我在调试视图时可以看到它),所以它看起来像这样

在此输入图像描述

知道如何使图标保持白色吗?我尝试了以下方法,但没有结果:

- (void)willPresentSearchController:(UISearchController *)searchController {

    searchController.searchBar.tintColor = [UIColor whiteColor];
}
Run Code Online (Sandbox Code Playgroud)

小智 3

使用图像渲染和色调颜色。

barButtonAppearanceInSearchBar.image = [[UIImage imageNamed:@"Close"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
barButtonAppearanceInSearchBar.tintColor = [UIColor whiteColor];
barButtonAppearanceInSearchBar.title = nil;
Run Code Online (Sandbox Code Playgroud)