在 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】:我找到了解决办法:将UISearchBar
的barTintColor
设置为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】:既不是只有barTintColor
、backgroundImage
也不是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 的边框的主要内容,如果未能解决你的问题,请参考以下文章
尽量不要在viewWillDisappear:方法中移除通知