【问题标题】:Changing Search Bar placeholder text font in Swift在 Swift 中更改搜索栏占位符文本字体
【发布时间】:2014-12-14 00:53:14
【问题描述】:

我正在尝试更改搜索显示控制器中搜索栏中占位符文本的字体。我正在查看一些示例并尝试实现它们,但由于它们在 Objective-C 中,我无法找到任何可以开始工作的示例。

比如我试过这个:

UITextField *textField = [[searchBar subviews] objectAtIndex:1]; 
[textField setFont:[UIFont fontWithName:@"Helvetica" size:40]];

但我无法通过var textField: UITextField = UISearchBar

有什么想法吗?

【问题讨论】:

    标签: ios xcode swift uisearchbar uifont


    【解决方案1】:

    在 iOS 8 中,试试这个

    for subView in searchBar.subviews  {
      for subsubView in subView.subviews  {
          if let textField = subsubView as? UITextField {
            textField.attributedPlaceholder =  NSAttributedString(string:NSLocalizedString("Search", comment:""),
              attributes:[NSForegroundColorAttributeName: UIColor.orangeColor()])
          }
      }
    }
    

    【讨论】:

      【解决方案2】:

      这适用于 ios7 -> ios9 使用 swift 2:

      if #available(iOS 9.0, *) {
          UITextField.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).font = UI.getInstance.tinyFont
      } else {
          func checkSubview(view:UIView)
          for subView in view.subviews {
              if subView is UITextField {
                  let textField = subView as! UITextField
                  textField.font = UI.getInstance.tinyFont
              } else {
                  checkSubview(subView)
              }
      
          }
          checkSubview(view)
      }
      

      只需将 UI.getInstance.tinyFont 替换为您想要的任何字体即可。

      【讨论】:

        【解决方案3】:
         //SearchBar Text
            let textFieldInsideUISearchBar = dashBoardSearchBar.valueForKey("searchField") as? UITextField
        textFieldInsideUISearchBar?.textColor = UIColor.whiteColor()
        
        //SearchBar Placeholder    
             let textFieldInsideUISearchBarLabel = textFieldInsideUISearchBar!.valueForKey("placeholderLabel") as? UILabel
        textFieldInsideUISearchBarLabel?.textColor = UIColor.whiteColor()
        

        【讨论】:

        • "placeholderLabel" 似乎不再起作用(iOS10),但是更改“searchField”的字体会同时更改占位符字体和文本字体
        【解决方案4】:

        这是更改字体或搜索栏文本字段中任何其他类似更改的最简单做法。 我一直在使用 XCode 8.4、Swift 3.x、iOS 10.x。

        extension UISearchBar {
        
        func change(textFont : UIFont?) {
        
            for view : UIView in (self.subviews[0]).subviews {
        
                if let textField = view as? UITextField {
                    textField.font = textFont
                }
            }
        } }
        

        上面的代码可以在你制作searchBar的IBOutlet的地方直接调用...

        @IBOutlet weak var searchBar: UISearchBar! {
            didSet {
                searchBar.change(textFont: GlobalConstants.Font.avenirBook14)
            }
        }
        

        【讨论】:

        • 它不工作;它只是以非常简单的方式工作,如下所示:searchBar.searchTextField.font = UIFont(name: "Helvetica", size: 40) 在 XCode 上测试:11.3 OS:13.3
        【解决方案5】:

        @Alvin 回答的 Swift 3 版本

        let textFieldInsideUISearchBar = searchBar.value(forKey: "searchField") as? UITextField
            let placeholderLabel       = textFieldInsideUISearchBar?.value(forKey: "placeholderLabel") as? UILabel
            placeholderLabel?.font     = UIFont.systemFont(ofSize: 12.0)
        

        【讨论】:

        • 以防万一其他人努力完成这项工作,如果您正在使用情节提要,则需要在情节提要的搜索栏上设置占位符值,然后才能使用此代码
        • 我使用的是 searchController 而不是 searchBar 所以不是使用 ... = searchBar.value ... 我使用 ... = searchController.searchBar.value ... 不同之处在于使用时一个 searchController 直接 searchBar 是它的一个属性,所以你必须先通过 searchBar 才能访问它。
        【解决方案6】:

        设置占位符文本字体大小:

        UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = UIFont.systemFont(ofSize: 12)
        

        设置搜索文本字体大小:

        UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = UIFont.systemFont(ofSize: 12)
        

        【讨论】:

          【解决方案7】:

          Swift 5 中甚至还有更简单的方法:

          searchBar[keyPath: \.searchTextField].font = UIFont(...)
          

          【讨论】:

          • 有趣的语法!
          • 表达式类型不明确,没有更多上下文
          • @Markon 你在使用 Swift 5 吗?也许还有其他问题,但是 Xcode 错误地显示了这一行?或者尝试清除构建
          【解决方案8】:
          searchBar.searchTextField.font = UIFont(name: "Helvetica", size: 40)
          

          【讨论】:

          • 嗨,欢迎来到 Stack Overflow!当你回答一个问题时,你应该包括某种解释,比如作者做错了什么以及你做了什么来解决它。我告诉你这个是因为你的答案被标记为低质量,目前正在审查中。您可以点击“编辑”按钮edit您的答案。
          • 这仅适用于 iOS 13 及更高版本
          猜你喜欢
          • 2020-02-22
          • 2019-02-25
          • 1970-01-01
          • 2020-10-20
          • 1970-01-01
          • 1970-01-01
          • 2014-07-23
          • 2018-10-14
          • 1970-01-01
          相关资源
          最近更新 更多