web-dev-qa-db-ja.com

UINavigationBarのiOS 11 UISearchBar

新しいiOS 11の大きなタイトルを使用して、新しいナビゲーションバーに検索バーを配置します。ただし、検索バーの色はiOSによって自動的に適用されるため、変更できません。

if #available(iOS 11.0, *) {
    let sc = UISearchController(searchResultsController: nil)
    navigationItem.searchController = sc
    navigationItem.hidesSearchBarWhenScrolling = false
}

検索バーは深い青色の背景になっていますが、白に変更したいだけです。

enter image description here

背景色を設定すると、次の結果になります。

navigationItem.searchController?.searchBar.backgroundColor = UIColor.white

enter image description here

検索バーでsetScopeBarButtonBackgroundImagesetBackgroundImageも試してみましたが、すべてが奇妙に見えます。

また、検索バーをタップして検索をトリガーすると、右側のキャンセルボタンがあるモードに切り替わります。 (ドイツ語で「Abbrechen」)

enter image description here

また、「Abbrechen」テキストの色も変更できません。 (白も必要)

どんな助けも大歓迎です。

編集:要求に応じて、ナビゲーションバーのスタイリングのコードを以下に示します。

self.navigationBar.tintColor = UIColor.myWhite
self.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarTitle()]
self.navigationBar.barTintColor = UIColor.myTint

if #available(iOS 11.0, *) {
    self.navigationBar.prefersLargeTitles = true
    self.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarLargeTitle()]
}

現在の結果:Krunalsのアイデアを使用して検索バーの背景色を設定しましたが、角が丸くなってしまいました。丸い角を再設定した後、検索バーのアニメーションが壊れているようです。

enter image description here

まだ満足のいく解決策はありません。 iOS 11のナビゲーションバーに埋め込まれた検索バーはカスタマイズできないようです。その間、プレースホルダーテキストの色を変更するだけで十分ですが、これでさえ不可能なようです。 (StackOverflowから複数のアプローチを試しました-動作しません)

21
Darko

今、それはあなたが望むものです...

if #available(iOS 11.0, *) {
            let sc = UISearchController(searchResultsController: nil)
            sc.delegate = self
            let scb = sc.searchBar
            scb.tintColor = UIColor.white
            scb.barTintColor = UIColor.white


            if let textfield = scb.value(forKey: "searchField") as? UITextField {
                textfield.textColor = UIColor.blue
                if let backgroundview = textfield.subviews.first {

                    // Background color
                    backgroundview.backgroundColor = UIColor.white

                    // Rounded corner
                    backgroundview.layer.cornerRadius = 10;
                    backgroundview.clipsToBounds = true;

                }
            }

            if let navigationbar = self.navigationController?.navigationBar {
                navigationbar.barTintColor = UIColor.blue
            }
            navigationItem.searchController = sc
            navigationItem.hidesSearchBarWhenScrolling = false

}

結果:

enter image description here

enter image description here


角丸:
角の丸いアニメーションも正常に機能しています。

enter image description here

19
Krunal

これはあなたのために働くはずです

func addSearchbar(){
        if #available(iOS 11.0, *) {
            let sc = UISearchController(searchResultsController: nil)
            let scb = sc.searchBar
            scb.tintColor = UIColor.white

            if let navigationbar = self.navigationController?.navigationBar {
                //navigationbar.tintColor = UIColor.green
                //navigationbar.backgroundColor = UIColor.yellow
                navigationbar.barTintColor = UIColor.blue
            }

            navigationController?.navigationBar.tintColor = UIColor.green
            navigationItem.searchController = sc
            navigationItem.hidesSearchBarWhenScrolling = false
        }
}


結果

enter image description here

enter image description here

3
Krunal

客観的C

if (@available(iOS 11.0, *)) {
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.delegate = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.navigationItem.searchController=self.searchController;
    self.navigationItem.hidesSearchBarWhenScrolling=NO;
    self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
    self.searchController.searchBar.showsBookmarkButton = NO;
    self.searchController.searchBar.placeholder = @"Search";
    self.searchController.searchBar.tintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
    self.searchController.searchBar.barTintColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
    UITextField *txfSearchField = [self.searchController.searchBar valueForKey:@"_searchField"];
    txfSearchField.tintColor=[UIColor colorWithRed:21/255.0 green:157/255.0 blue:130/255.0 alpha:1];
    txfSearchField.textColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
    txfSearchField.backgroundColor=[UIColor whiteColor];
    UIView *backgroundview= [[txfSearchField subviews]firstObject ];
    backgroundview.backgroundColor=[UIColor whiteColor];
    // Rounded corner
    backgroundview.layer.cornerRadius = 8;
    backgroundview.clipsToBounds = true;
}
2
nkitku

AppDelegate内のこのコードを使用して、テキストフィールドの背景を変更しました。

Swift 4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        //background color of text field
         UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan

        }

これが結果です

example used to change the background to cyan color

1
Marta

これは、検索バーを白にするために使用したコードです。

if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
            if let backgroundview = textfield.subviews.first {
                backgroundview.backgroundColor = UIColor.init(white: 1, alpha: 1)
                backgroundview.layer.cornerRadius = 10
                backgroundview.clipsToBounds = true
            }
        }

enter image description here

1
iOS_Mouse

このコードを試して、

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];
0
AshokPolu