将UISearchBar的取消按钮更改为图标

5
我希望将 UISearchBarCancel 按钮更改为只有图像而没有文本。目前我已经实现了原始行为的一部分。

enter image description here

到这里

enter image description here

这是朝着正确方向迈出的一步,但问题在于按钮太宽了。在调试视图时,我可以看到左右两侧的按钮标签间距为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;

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

enter image description here

有什么办法可以保持图标为白色吗?我尝试了下面的方法,但没有结果:

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

    searchController.searchBar.tintColor = [UIColor whiteColor];
}

可能是 UISearchbar 的取消按钮图像 的重复问题。 - Anbu.Karthik
谢谢,我之前已经看过那个问题了,但这里的问题不同。如果我想保持它作为文本按钮,我知道如何更改此按钮的背景颜色,但我不想 - 我希望它只是图像。你能否请取消将其标记为可能的重复项? - artooras
你找到了解决宽间距问题的方法吗? - hyouuu
2个回答

3
这是@jamesBlake答案的Swift 4.1版本:

 func setUpSearchBar() {

    let barButtonAppearanceInSearchBar: UIBarButtonItem?
    barButtonAppearanceInSearchBar = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
    barButtonAppearanceInSearchBar?.image = UIImage(named: "Home.png")?.withRenderingMode(.alwaysTemplate)
    barButtonAppearanceInSearchBar?.tintColor = UIColor.white
    barButtonAppearanceInSearchBar?.title = nil
}

3
使用图像渲染和色调颜色。
barButtonAppearanceInSearchBar.image = [[UIImage imageNamed:@"Close"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
barButtonAppearanceInSearchBar.tintColor = [UIColor whiteColor];
barButtonAppearanceInSearchBar.title = nil;

好的建议。这确实解决了我的第二个问题,只是我不得不使用渲染模式 UIImageRenderingModeAlwaysOriginal - artooras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接