将UISearchBar取消按钮更改为图标

时间:2015-09-30 06:37:38

标签: ios objective-c uisearchbar uibarbuttonitem uisearchcontroller

我想将UISearchBar的{​​{1}}按钮更改为仅包含图像且没有文字的按钮。这是我到目前为止远离原始行为的地方

enter image description here

到这个

enter image description here

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

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

Cancel

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

enter image description here

知道如何将图标保持为白色吗?我在下面尝试了这种方法,但没有结果:

UIBarButtonItem *barButtonAppearanceInSearchBar;

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

barButtonAppearanceInSearchBar.image = [UIImage imageNamed:@"Close"];
barButtonAppearanceInSearchBar.title = nil;

2 个答案:

答案 0 :(得分:4)

使用图像渲染和色调。

barButtonAppearanceInSearchBar.image = [[UIImage imageNamed:@"Close"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
barButtonAppearanceInSearchBar.tintColor = [UIColor whiteColor];
barButtonAppearanceInSearchBar.title = nil;

答案 1 :(得分:0)

这是@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
}