2013-11-11 2 views
40

Я пытаюсь удалить границу UISearchBar в iOS 7. В iOS 6 она работает нормально. Я разработал UISearchBar программно. Я пробовал почти все вещи из Stack Overflow и Google.Удалить границу UISearchBar в iOS7

SearchBar смотрит прямо сейчас
SearchBar looking right now

Что я хочу достичь
What i want to achieve

Я попробовал все эти вещества, упомянутые ниже

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; 
    } 
} 

, но до сих пор нет успеха.

ответ

23

Я нашел решение: Установить barTintColor из UISearchBar в clearColor

topSearchBar.barTintColor = [UIColor clearColor]; 
+0

но иногда работать для этого решения, я использую тождественны код, но один работает, а другой - черный, поэтому я использую whitecolor, чтобы его исправить. Странный – chings228

+5

В моем случае он всегда показывал черный цвет, когда я устанавливал чистый цвет :( –

+0

Попробуйте ответить nerowolfe: – TheMan

73

Set Search Style = минимальная в свойствах панель поиска в IB

Или

Swift: 
searchBar.searchBarStyle = UISearchBarStyleMinimal; 

Swift 3: 
searchBar.searchBarStyle = .minimal; 
+0

я создал 'UISearchBar' программно. – iEngineer

+0

searchBar.searchBarStyle = UISearchBarStyleMinimal; – nerowolfe

+0

Не работает. :-( – iEngineer

45

Установка searchBarStyle в UISearchBarStyleMinimal испортил настройку цвета, поэтому вместо этого исправлена ​​проблема.

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

nice .. ее рабочий –

+4

это лучше, чем любой другой ответ здесь! – Umitk

1
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)]]; 

Порядок кода, кажется, имеет значение. Это не работает, если я устанавливаю barStyle перед searchBarStyle.

11

Это работает, только если .borderStyle = UITextBorderStyleLine; .


Мои эксперименты заключение,

  • Если вы на iOS7 и выше, и если вы будете устанавливать, searchBar.barTintColor = [UIColor clearColor]; тогда вы не сможете настроить цвет фона UISearchBar ,

  • если вы установили searchBarStyle в UISearchBarStyleMinimal, тогда это испортит цвет UISearchBar, как сказал @Rich Fox.

Итак, [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 { 

} 

даст вам: в Xcode 7.2

enter image description here

+0

Это правильно. Установка фонового изображения снята с границы. – Rishab

0
- (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]; 

} 

enter image description here

1

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 
18

Для Swift, эти 2 линии достаточно:

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

И затем, применить необходимый цвет, который вы хотите:

self.search.barTintColor = UIColor.redColor() 
1

Ни только barTintColor, backgroundImage ни backgroundColor одни делали это для меня, но все они вместе работали для меня:

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

Okey. Где так много ответов, но они сложны. Я нашел это решение для меня:

Swift 3 (4)

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

Где .primary является

extension UIColor { 

    static var primary:UIColor { 
     return "#5163F4".color 
    } 
} 
Смежные вопросы