我的问题已经在标题中说明了:我想去掉
这是我所说的内容的图像:
更新:
我认为这条线是
UISearchBar
底部绘制的黑线。有什么想法吗?这是我所说的内容的图像:
![search bar with black bottom line](https://istack.dev59.com/X6BXa.webp)
我认为这条线是
UITableView
的tableHeaderView
的一部分。 我仍然不知道如何将其删除。UISearchBar
底部绘制的黑线。有什么想法吗?UITableView
的tableHeaderView
的一部分。 我仍然不知道如何将其删除。试一试这个
searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
searchBar.layer.borderColor = searchBar.barTintColor?.cgColor
- PaludissearchBar.layer.borderColor = searchBar.barTintColor?.CGColor
,而另一个人则说要删除它 -_- - Iulian Onofrei所以,我已经深入研究了API,试图弄清楚为什么会发生这种情况。显然,编写UISearchBar
API的人将线条光栅化到图像上,并将其设置为其backgroundImage
。
我提出了一个更简单的解决方案,如果您想设置backgroundColor
并摆脱毛刺:
searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];
如果您只需要一个没有发丝的背景图片:
searchBar.backgroundImage = <#... some image #>
我的UISearchBar
顶部和底部都有0.5像素
的黑色水平线。到目前为止,我唯一能想到消除它们的方法是将其样式设置为Minimal
:
mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
我通过像下面这样向searchBar
的视图堆栈添加一个subview
来解决了这个问题:
CGRect rect = self.searchBar.frame;
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(0, rect.size.height-2,rect.size.width, 2)];
lineView.backgroundColor = [UIColor whiteColor];
[self.searchBar addSubview:lineView];
在这里,self.searchBar
是我的控制器类中的UISearchBar
指针。Swift 4.2:
controller.searchBar.layer.borderWidth = 1
controller.searchBar.layer.borderColor = UIColor(red: 255/255, green: 253/255, blue: 247/255, alpha: 1.0).cgColor
// these 2 lines get rid of the 1 px line
searchBar.backgroundColor = .white
searchBar.backgroundImage = UIImage()
// this line will let you color the searchBar textField where the user actually types
searchBar.searchTextField.backgroundColor = UIColor.lightGray
UISearchBar
放置在表头之前,请将tableHeaderView设置为nil
。UIView
(例如“wrapper”)作为子视图,然后...CGRect frame = wrapper.frame;
CGRect lineFrame = CGRectMake(0,frame.size.height-1,frame.size.width, 1);
UIView *line = [[UIView alloc] initWithFrame:lineFrame];
line.backgroundColor = [UIColor whiteColor]; // or whatever your background is
[wrapper addSubView:line];
[line release];
self.tableView.tableHeaderView = wrapper;
[wrapper release];
UISearchBar
放置在表头视图之前,将 tableHeaderView
设置为 nil
。这样做的原因是什么? - Ben CollinsUISearchBar
,你可以这样覆盖它的 frame。- (void)setFrame:(CGRect)frame {
frame.origin.y = -1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, 1.0f);
}
如果您想要修复底部像素,可以尝试以下操作(未经测试):
- (void)setFrame:(CGRect)frame {
frame.origin.y = 1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, -1.0f);
}
clipsToBounds
和 searchFieldBackgroundPositionAdjustment
在 setFrame
中。同时,searchFieldBackgroundPositionAdjustment
只是为了重新居中搜索栏。
更新
原来当搜索栏激活时,tableView
会从更新 origin.y
开始向上移动 1 像素。这感觉有点奇怪。我意识到解决方案就是设置 self.clipsToBounds = YES;
。我使用了
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.backgroundImage = UIImage() // Removes the line
它像魔法一样奏效了 :)