swift 更改UISearchBar的textField的背景

q5iwbnjs  于 2023-08-02  发布在  Swift
关注(0)|答案(7)|浏览(135)

我已经纠结了一段时间了。我到处都找过了,但提供的解决方案只适用于objective-c。其中包括
第一个月
虽然有些人可能会说这是受保护的API,苹果可能会拒绝使用这种代码的应用程序。
所以,现在我已经尝试了很多方法来解决这个问题,但它根本不起作用。我的代码是这样的:

searchBar = UISearchBar(frame: CGRectMake(0, 0, 320.0, 30.0))
searchBar.autoresizingMask = UIViewAutoresizing.FlexibleWidth
searchBar.searchBarStyle = UISearchBarStyle.Minimal
searchBar.layer.cornerRadius = 15
searchBar.delegate = self

searchBar.backgroundColor = UIColor.whiteColor()

if floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1{
    // Load resources for iOS 6.1 or earlier
    searchBar.placeholder = "Search";
} else {
    // The following "hack" (if we can call that) breaks the UI for different size devices.
    // Load resources for iOS 7 or later
    searchBar.placeholder = "Search                                         ";
}

字符串
这给了我一个奇怪的结果:x1c 0d1x的数据
而我想要的只是UISearchBar内的文本字段有一个白色的背景和SearchBar本身有一个cornerRadius,比如说,15。
我该怎么办?
先谢谢你了

hmtdttj4

hmtdttj41#

您必须访问UISearchBar中的UITextField。您可以使用valueForKey("searchField")来实现这一点

var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField") as? UITextField

textFieldInsideSearchBar?.textColor = yourcolor
textFieldInsideSearchBar?.backgroundColor = backgroundColor
...

字符串
可以在其中更改UITextField的任何参数,如textColor或backgroundColor

yacmzcpb

yacmzcpb2#

在Swift 3中:

if let txfSearchField = searchController.searchBar.value(forKey: "_searchField") as? UITextField {
        txfSearchField.borderStyle = .none
        txfSearchField.backgroundColor = .lightGray
    }

字符串

kx5bkwkv

kx5bkwkv3#

加上上面的答案。如果要保持搜索栏样式UISearchBarStyleMinimal并更改UISearchBar的textField的背景,请将textField的borderStyle设置为UITextBorderStyleNone
目标C:

self.searchBar.searchBarStyle = UISearchBarStyleMinimal;

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
    txfSearchField.borderStyle = UITextBorderStyleNone;
    txfSearchField.backgroundColor = yourColor;

字符串

1aaf6o9v

1aaf6o9v4#

Swift 5和iOS 13

searchBar.searchTextField.backgroundColor = .white

字符串
你可以直接改变文本域背景的颜色。

kcrjzv8t

kcrjzv8t5#

UISearchBar添加扩展以访问其UITextField

import UIKit

extension UISearchBar {

    var textField: UITextField? {
        let subViews = subviews.flatMap { $0.subviews }
        return (subViews.filter { $0 is UITextField }).first as? UITextField
    }
}

字符串
然后,您可以按预期设置其属性:

searchController.searchBar.textField?.backgroundColor = .red
searchController.searchBar.textField?.tintColor = .yellow

wfveoks0

wfveoks06#

searchController.searchBar.searchTextField.backgroundColor = UIColor.白色searchController.searchBar.searchTextField.textColor = UIColor.black

dwthyt8l

dwthyt8l7#

使用iOS 16或更高版本时,可以直接访问searchTextField属性。
但是,设置backgroundColor仅在borderStyle设置为.none时才能按预期工作。这将导致文本字段没有圆形边框。要解决此问题,请使用以下代码:

searchController.searchBar.searchTextField.borderStyle = .none
searchController.searchBar.searchTextField.backgroundColor = .white // Or any other UIColor
searchController.searchBar.searchTextField.layer.cornerRadius = 8.0

字符串

相关问题