私の質問はすでにタイトルで指定されています。UISearchBar
の下部に描かれた黒い線を取り除きたいのですが。何か案は?
これが私の意味するイメージです:
[〜#〜]更新[〜#〜]:
この行はUITableView
のtableHeaderView
の一部だと思います。それを削除する方法はまだわかりません。
subview
をsearchBar
のビュースタックに次のように追加して、これを修正しました。
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
ポインターです。
これを試して
searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
それで、私はAPIがなぜこれが起こっているのかを理解しようとしているのを掘り下げました。どうやらUISearchBar
APIを書いた人はラインを画像にラスタライズしてbackgroundImage
に設定しています。
backgroundColor
を設定してヘアラインを取り除く場合は、より簡単な解決策を提案します。
searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];
または、ヘアラインのない背景画像だけが必要な場合:
searchBar.backgroundImage = <#... some image #>
私が持っています 0.5px
UISearchBar
の上と下の両方に黒い水平線。私がこれまでにそれらを取り除く唯一の方法は、そのスタイルをMinimal
に設定することです。
mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
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
アユッシュの答えに基づく答え。
この質問はすでに解決されていますが、私の解決策は誰かを助けることができるでしょう。 1pxの上部の境界線を削除しようとした以外は、同様の問題がありました。
UISearchBar
をサブクラス化すると、このようにフレームをオーバーライドできます。
- (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
は、searchBarがアクティブな間、Origin.y
の更新から1pxシフトすることがわかりました。少し変な感じがします。解決策は設定self.clipsToBounds = YES;
と同じくらい簡単であることに気付きました
nil
をそこに配置する前に、tableHeaderViewをUISearchBar
に設定します。
それでも問題が解決しない場合は、カバーしてください。まず、検索バーを一般的な適切なサイズのUIView
(たとえば、「ラッパー」)にサブビューとして追加し、次に
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];
そして、それをtableHeaderViewに追加します。
self.tableView.tableHeaderView = wrapper;
[wrapper release];
警告。これはハックです。より良い、より公式な方法を知りたいです。
ポニーデバッガーを使用して、サブビュー階層のどこにあるかを把握できます。あなたが見ているものは「セパレータ」と呼ばれるプライベートUIImageViewだと思います
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
for (UIView* view in self.searchBar.subviews) {
if (view.frame.size.height == 1 && [view isKindOfClass:[UIImageView class]]) {
view.alpha = 0;
break;
}
}
}