如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?

Posted

技术标签:

【中文标题】如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?【英文标题】:How to change the position or hide magnifier icon in UISearchBar in IOS 7? 【发布时间】:2013-10-24 13:19:53 【问题描述】:

我正在开发 ios 7 应用程序。默认情况下,它看起来像 Pic(1)。但我需要将其更改为 Pic(2)。我在谷歌上搜索并找到了很少的答案,但它没有改变。或者否则我需要隐藏。以便我可以使用背景图像进行管理。这是第一张图像

我使用下面的代码来修改它。但是没有成功。

在.h文件中

@property(nonatomic,strong) IBOutlet UISearchBar *findSearchBar;

在 .m 文件中

@synthesize findSearchBar;

 - (void)viewDidLoad
 
[super viewDidLoad];
 [self setSearchIconToFavicon];
 

 - (void)setSearchIconToFavicon

// The text within a UISearchView is a UITextField that is a subview of that UISearchView.
   UITextField *searchField;
   for (UIView *subview in self.findSearchBar.subviews)
   
       if ([subview isKindOfClass:[UITextField class]]) 
          searchField = (UITextField *)subview;
          break;
      
  

if (searchField)

    UIView *searchIcon = searchField.leftView;
    if ([searchIcon isKindOfClass:[UIImageView class]])
    
        NSLog(@"aye");
    
    searchField.rightView = nil;
    searchField.leftView = nil;
    searchField.leftViewMode = UITextFieldViewModeNever;
    searchField.rightViewMode = UITextFieldViewModeAlways;



我不知道如何使视图图像的中心为零。这真的浪费了我的时间。请帮助我。我哪里出错了。

【问题讨论】:

请参阅 swift-3 : ***.com/questions/19289406/… 【参考方案1】:
    UITextField *txfSearchField = [looksearchbar valueForKey:@"_searchField"];
    [txfSearchField setBackgroundColor:[UIColor whiteColor]];
    [txfSearchField setLeftViewMode:UITextFieldViewModeNever];
    [txfSearchField setRightViewMode:UITextFieldViewModeNever];
    [txfSearchField setBackground:[UIImage imageNamed:@"searchbar_bgImg.png"]];
    [txfSearchField setBorderStyle:UITextBorderStyleNone];
    //txfSearchField.layer.borderWidth = 8.0f;
    //txfSearchField.layer.cornerRadius = 10.0f;
    txfSearchField.layer.borderColor = [UIColor clearColor].CGColor;
    txfSearchField.clearButtonMode=UITextFieldViewModeNever;

试试这个可能对你有帮助........

【讨论】:

尝试设置背景图片而不是设置 RGB 颜色。 请注意,这可能会导致您的应用被应用商店拒绝。特别是[looksearchbar valueForKey:@"_searchField"] 部分。更安全的方法是查看搜索栏的子视图(以及子视图的子视图),直到找到正确的子视图 [subview isKindOfClass:[UITextField class]] 从 iOS 5.0 开始,您可以通过 UIAppearance 在 UITextField 上设置这些值:[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setLeftViewMode:UITextFieldViewModeNever]; 不用担心 [looksearchbar valueForKey:@"_searchField"] - 这样做完全没问题 - 我的任何应用都不会被拒绝 @GrzegorzKrukowski,不,这样做是不行的。任何涉及私有 API 的内容都会遭到拒绝并且严格违反规则(无论您的应用程序是否被标记)。这即使是远程依赖也是极其危险的,并且可能会在任何增量更新中发生变化。【参考方案2】:

我不确定如何将占位符左对齐,但从 iOS 5.0 开始,有一种简单且受支持的方法可以修改搜索栏的文本字段属性,例如:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setLeftViewMode:UITextFieldViewModeNever];

这将隐藏放大镜图标。

【讨论】:

为快刀斩乱麻点赞!为什么用 UISearchBar 一定要这么费劲(修辞)?【参考方案3】:

你可以试试:

searchBar.setImage(UIImage(named: "yourimage")!, forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)

【讨论】:

以上是关于如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?

UISearchBar 在 iOS 7 中隐藏视图

iOS 7 UISearchBar 右间距

在 iOS 7.1 中,UISearchBar 的文本和占位符属性不再起作用

在 tableHeaderView iOS 7 中使用 UISearchBar 访问错误

UITextfield 在 iOS 7 中不能作为 UISearchBar 的子视图?