web-dev-qa-db-ja.com

UISearchBarのカスタマイズ:検索バーの下の1pxの黒い線を取り除こうとします

私の質問はすでにタイトルで指定されています。UISearchBarの下部に描かれた黒い線を取り除きたいのですが。何か案は?

これが私の意味するイメージです:

search bar with black bottom line

[〜#〜]更新[〜#〜]

この行はUITableViewtableHeaderViewの一部だと思います。それを削除する方法はまだわかりません。

46
strave

subviewsearchBarのビュースタックに次のように追加して、これを修正しました。

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ポインターです。

19
Nonlinearsound

これを試して

 searchBar.layer.borderWidth = 1;

 searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
72
Ayush Goel

なぜ:

それで、私はAPIがなぜこれが起こっているのかを理解しようとしているのを掘り下げました。どうやらUISearchBar AP​​Iを書いた人はラインを画像にラスタライズしてbackgroundImageに設定しています。

解決:

backgroundColorを設定してヘアラインを取り除く場合は、より簡単な解決策を提案します。

searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];

または、ヘアラインのない背景画像だけが必要な場合:

searchBar.backgroundImage = <#... some image #>
44
Oxcug

私が持っています 0.5pxUISearchBarの上と下の両方に黒い水平線。私がこれまでにそれらを取り除く唯一の方法は、そのスタイルをMinimalに設定することです。

mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
27
ancajic

ソリューション

XCode 10.1 Swift 4.2

enter image description here

6
swift2geek

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

アユッシュの答えに基づく答え。

5
VBaarathi

この質問はすでに解決されていますが、私の解決策は誰かを助けることができるでしょう。 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);
}

例を簡単にするためだけに、clipsToBoundssearchFieldBackgroundPositionAdjustmentsetFrameがあります。

また、searchFieldBackgroundPositionAdjustmentは、検索フィールドを中央に戻すためにのみ必要です。

[〜#〜]更新[〜#〜]

tableViewは、searchBarがアクティブな間、Origin.yの更新から1pxシフトすることがわかりました。少し変な感じがします。解決策は設定self.clipsToBounds = YES;と同じくらい簡単であることに気付きました

3
cnotethegr8

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];
3
Mundi

警告。これはハックです。より良い、より公式な方法を知りたいです。

ポニーデバッガーを使用して、サブビュー階層のどこにあるかを把握できます。あなたが見ているものは「セパレータ」と呼ばれるプライベート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;
    }
  } 
}
1
Ray Fix

私と一緒に働いたことは、検索バーbarTintColorをナビゲーションバーの色として設定することです

    searchBar.barTintColor = UIColor.colorWithHexString(hexStr: "479F46")

テスト後、iOS 10.xと11.xの両方で問題を解決します

GIF:

enter image description here

0
DeyaEldeen