在 iOS7 中移除 UISearchBar 的边框

Posted

技术标签:

【中文标题】在 iOS7 中移除 UISearchBar 的边框【英文标题】:Remove Border of UISearchBar in iOS7 【发布时间】:2013-11-11 05:44:56 【问题描述】:

我正在尝试在 ios 7 中删除 UISearchBar 的边框。在 iOS 6 中它工作正常。我以编程方式创建了 UISearchBar。我几乎尝试了 Stack Overflow 和 Google 的所有东西。

搜索栏正在寻找

我想要实现的目标

我尝试了下面提到的所有这些东西

searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor whiteColor] CGColor];

for (id img in searchBar.subviews)
       
     if ([img isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
          
            [img removeFromSuperview];    
     
 

for (UIView *sub in self.tableView.tableHeaderView.subviews) 
    if ([sub isKindOfClass:[UIImageView class]]) 
        sub.hidden = YES;
    
  

但还是没有成功。

【问题讨论】:

【参考方案1】:

在 IB 的搜索栏属性中设置搜索样式 = 最小

或者

Swift:
searchBar.searchBarStyle = UISearchBarStyleMinimal;

Swift 3:
searchBar.searchBarStyle = .minimal;

【讨论】:

我以编程方式创建了UISearchBar searchBar.searchBarStyle = UISearchBarStyleMinimal; UISearchBar 的searchBarStyle iOS7.0 及以后版本可用。 谢谢!!!工作!! Xamarin.iOS 代码 searchBar.SearchBarStyle = UISearchBarStyle.Minimal;【参考方案2】:

将 searchBarStyle 设置为 UISearchBarStyleMinimal 会弄乱我的颜色设置,因此这样做可以解决问题。

[self.searchField setBackgroundImage:[[UIImage alloc]init]];

对于那些在 Swift 4 中寻找此选项的人:

searchField.setBackgroundImage(UIImage(), for: .any, barMetrics: UIBarMetrics.default)

【讨论】:

这比这里的任何其他答案都好!【参考方案3】:

对于 Swift,这两行就足够了:

self.search.isTranslucent = false
self.search.backgroundImage = UIImage()

然后,应用所需的颜色:

self.search.barTintColor = .red

【讨论】:

【参考方案4】:

我找到了解决办法:将UISearchBarbarTintColor设置为clearColor

topSearchBar.barTintColor = [UIColor clearColor];

【讨论】:

但有时适用于这个解决方案,我使用相同的代码,但一个有效,另一个显示黑色,所以我使用白色来修复它。奇怪 在我的情况下,当我设置清晰的颜色时它总是显示黑色:( 尝试做 nerowolfe 的回答: @Thought-Beast 可能您将 alpha 设置为某个最小值线 .1 还是什么?【参考方案5】:

这仅适用于.borderStyle = UITextBorderStyleLine; .


我的实验结论,

如果您使用的是 iOS7 及更高版本,并且您将设置 searchBar.barTintColor = [UIColor clearColor];,那么您将无法自定义 UISearchBar 的背景颜色。

如果您将searchBarStyle 设置为UISearchBarStyleMinimal,那么@Rich Fox 所说的UISearchBar 的颜色会乱七八糟。

所以,[self.searchField setBackgroundImage:[[UIImage alloc]init]]; 解决方案去除边框。

更新示例:

UISearchBar *search = [[UISearchBar alloc] init];
search.tag = kTagSearchBar;
search.delegate = self;
search.tintColor = [UIColor redColor];
search.searchBarStyle = UISearchBarStyleMinimal;
search.frame = CGRectMake(0, 0, 320, 50);
search.placeholder = @"Search";
search.barTintColor = [UIColor blueColor];
search.translucent = NO;
search.opaque = NO;
search.showsCancelButton = NO;
[search setBackgroundImage:[[UIImage alloc] init]];
[self.view addSubview:search];

//customize textfield inside UISearchBar
@try 
    for (id object in [[[search subviews] firstObject] subviews])
    
        if (object && [object isKindOfClass:[UITextField class]])
        
            UITextField *textFieldObject = (UITextField *)object;
            textFieldObject.backgroundColor = [UIColor whiteColor];
            textFieldObject.borderStyle = UITextBorderStyleLine;
            textFieldObject.layer.borderColor = [UIColor blueColor].CGColor;
            textFieldObject.layer.borderWidth = 1.0;
            break;
        
    

@catch (NSException *exception) 
    NSLog(@"Error while customizing UISearchBar");

@finally 


会给你:

【讨论】:

这是正确的。设置背景图片移除了边框。【参考方案6】:

既不是只有barTintColorbackgroundImage 也不是backgroundColor 单独为我做这件事,但一起做对我有用:

self.searchBar.translucent      = NO;
self.searchBar.barTintColor     = [styleManager currentSearchBarTintColor];
self.searchBar.backgroundImage  = [UIImage new];
self.searchBar.backgroundColor  = [styleManager currentSearchBarTintColor];

【讨论】:

【参考方案7】:

好的。有很多答案,但它们太复杂了。 我找到了这个解决方案:

斯威夫特 3 (4)

searchBar.setBackgroundImage(UIImage(), for: .top, barMetrics: .default)
searchBar.backgroundColor = .primary

.primary 在哪里

extension UIColor 

    static var primary:UIColor 
        return "#5163F4".color
    

【讨论】:

【参考方案8】:
self.searchBar.translucent = NO;
self.searchBar.opaque = NO;
if ([self.searchBar respondsToSelector:@selector(setSearchBarStyle:)]) 
    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;


// iOS 7 remove 1 px bottom border
if ([self.searchBar respondsToSelector:@selector(setBarTintColor:)]) 
    self.searchBar.barTintColor = [UIColor clearColor];

self.searchBar.barStyle = UIBarStyleDefault;

// to remove the 1px bottom border iOS 5, 6
[self.searchBar setBackgroundImage:[UIImage imageWithColor:[UIColor clearColor] andSize:CGSizeMake(1.0f, 1.0f)]];

代码的顺序似乎很重要。如果我在 searchBarStyle 之前设置 barStyle,它将不起作用。

【讨论】:

【参考方案9】:

Xcode 7.2 中的 Swift 2.1,这对我有用。

self.searchController.searchBar.backgroundImage = UIImage()

下面是我的完整代码。

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit() 
tableView.sectionIndexBackgroundColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.backgroundColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.barTintColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.backgroundImage = UIImage()
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar

【讨论】:

【参考方案10】:
- (void)createNavigationBar

    _searchBar = [[UISearchBar alloc]init];
    _searchBar.backgroundColor = [UIColor whiteColor];
    _searchBar.placeholder = @"Search";
    _searchBar.translatesAutoresizingMaskIntoConstraints = NO;

    self.navigationItem.titleView = _searchBar;
    NSDictionary *viewsDictionary = @@"SearchBar":_searchBar;
    NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[SearchBar(30)]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:viewsDictionary];
    NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[SearchBar]-15-|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:viewsDictionary];
    [_searchBar.superview addConstraints:constraint_POS_V];
    [_searchBar.superview addConstraints:constraint_POS_H];


【讨论】:

以上是关于在 iOS7 中移除 UISearchBar 的边框的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中移除 UIToolbar 细线

尽量不要在viewWillDisappear:方法中移除通知

不要在viewWillDisappear:方法中移除通知

如何在 iOS7 中右对齐 UISearchbar 的文本

如何在iOS7中更改UISearchBar的取消按钮的textColor?

如何在 iOS7 中更改 UISearchBar 的背景颜色