web-dev-qa-db-ja.com

iOS 11 UISearchBarの背景色

この質問は、SOでmany回何度も尋ねられたことを理解しています。ただし、AppleはiOS 11のリリースで最も効果的です)、UISearchBarに一見不要な変更を加えたようです。具体的には、ビュー階層。

さらに、検索バーの「テキストフィールド」は検索バーのサブビューでアクセスできなくなり、以前のソリューションのallが「アクセス」してテキストフィールドの背景色を変更する、またはその問題のテキストフィールドの任意のプロパティ。

  • 実際に検索バーの背景色をiOS 11で調整する方法を知っている人はいますか?

FYI:特にテキストの背後の色について話している...検索バーのスタイルを最小限に指定しない限り、11の時点ではデフォルトで白になっています。

更新1:

この質問の投稿以来、私はまだこの問題に対する有効なまたは本当にany実際の解決策を見つけていません。私が来たように思われる最も近いのは、インスタンスプロパティの外観に深く飛び込むことです

[[UISearchBar class] appearanceWhenContainedInInstancesOfClasses:(nonnull NSArray<Class<UIAppearanceContainer>> *)]

UISearchBarの。次のようなメソッドを介して、見つかったUITextFieldで遊んでみます。

if ([view isKindOfClass:[UITextField class]]) {
    return (UITextField*)view;
}
UITextField *searchTextField;
for (UIView *subview in view.subviews) {
    searchTextField = [self searchViewForTextFieldBg:subview];
    if (searchTextField) {
        break;
    }
}
return searchTextField;

new背景ビューの描画を開始して、ビューの後ろに配置できます。しかし、これ以上追求するのが面倒なので、元の背景を正確に模倣するために正しいフレーム/境界でビューを描画するという問題がありました。

うまくいけば、誰かがこの問題の実際の解決策を見つけることができます。ナイスミスアップル...

12

これを探しているのではないでしょうか?しかし、私はそれをSwift :(

@IBOutlet weak var sbSearchBar: UISearchBar!

if let textfield = sbSearchBar.value(forKey: "searchField") as? UITextField {
    textfield.textColor = UIColor.blue
    textfield.backgroundColor = UIColor.yellow
}

これが結果です:

enter image description here

7
Krunal

このコードは、テキストフィールドの背景色を変更します。

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

6
Marta
_let searchBar = UISearchBar(frame: CGRect())
let searchField: UITextField? = searchBar.value(forKey: "searchField") as? UITextField
let searchBarBackground: UIView? = searchBar.value(forKey: "background") as? UIView
// searchBarBackground?.removeFromSuperview()

if searchField != nil {
    var frame = searchField?.frame
    frame?.size.height = 30
    searchField?.frame = frame!
    searchField?.backgroundColor = .yellow
}

searchBar.barTintColor = .red
searchBar.delegate = self
searchBar.backgroundColor = .green
_

ランタイムビューの階層

上記のコードでUISearchBarの背景色を設定すると、色付きのサブビューが次の画像のように表示されます(リンクをクリックすると表示されます)。 

backgroundColor(UISearchBarサブビューのスーパービュー)

緑のビューのクラス名がISearchBar in Object inspectorであることがわかります。

したがって、_searchBar.backgroundColor = .green_を使用する場合は、SuperviewのbackgroundColorを緑に設定します。したがって、UISearchBarインスタンスプロパティbackgroundColorは、スーパービューの背景色を設定します。

ISearchBarのスーパービュー

barTintColor for UISearchBarBackground

赤いビューのクラス名はISearchBarBackground in Object inspectorであることがわかります。

ただし、ビューにアクセスする直接的な方法はありません。[〜#〜] kvc [〜#〜]searchBar.value(forKey: "background") as? UIViewを使用して取得できますsearchBarBackground

_searchBar.barTintColor = .red_を使用する場合、UISearchBarBackgroundのビューのbackgroundColorを赤に設定します。 ティントバーレイヤーの2つの黒い境界線を削除するには、スーパービューから背景を削除する必要があります。

ISearchBarのbarTintColor

_searchField?.backgroundColor_ for UITextField

オブジェクトインスペクターで、黄色のビューのクラス名が_ UISearchBarSearchFieldBackgroundView(UISearchBarTextFieldのサブビュー)であることがわかります。

searchFieldに直接アクセスする方法はありません。searchBarBackgroundと同じです。 [〜#〜] kvc [〜#〜]searchField: UITextField? = searchBar.value(forKey: "searchField") as? UITextFieldを使用して、searchFieldを取得することもできます。

_searchField?.backgroundColor = .yellow_を使用する場合、UITextFieldのbackgroundColorを黄色に設定します。したがって、テキストフィールドの背景色を設定する場合は、最初に[〜#〜] kvc [〜#〜]を使用してsearchFieldにアクセスする必要があります

ISearchBarのUITextField

4
user5533269

スウィフト4-5

searchController.searchBar.barTintColor = .white

0
Juan Rangel