Xcode13更新后Mac Catalyst下Search Bar的textfield光标颜色修改失效问题
Xcode13+ Mac Catalyst UISearchBar光标颜色修改失效解决方案
Xcode13及以上版本编译的Mac Catalyst应用中,UISearchBar的
searchTextField属性对应的UIKit层tintColor会被内部桥接的AppKit NSTextField控件默认配色覆盖,仅在viewDidLoad等早期生命周期执行searchController.searchBar.searchTextField.tintColor = .white不会生效。
可行修改方案
方案1:调整赋值时机到视图渲染完成后(无私有API,优先推荐)
在viewWillAppear或viewDidAppear生命周期执行修改,代码如下:override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) #if targetEnvironment(macCatalyst) searchController.searchBar.searchTextField.tintColor = .white #endif }该方案适配Xcode13~Xcode15所有版本,无审核风险。
方案2:全局统一配置所有搜索框光标颜色
适合全项目搜索框需要统一配色的场景,在App启动入口(如didFinishLaunchingWithOptions)执行配置:func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { #if targetEnvironment(macCatalyst) UISearchTextField.appearance().tintColor = .white #endif return true }方案3:通过KVC直接修改桥接层NSTextField属性
前两种方案不生效时可使用,涉及私有属性,需自行验证App Store审核规则:#if targetEnvironment(macCatalyst) if let nsTextField = searchController.searchBar.searchTextField.value(forKey: "_nsTextField") as? NSObject { nsTextField.setValue(UIColor.white, forKey: "tintColor") } #endif
注意事项
- 所有Mac Catalyst专属逻辑建议用
targetEnvironment(macCatalyst)编译宏包裹,避免影响iOS端的正常运行逻辑 - 涉及私有API的方案提交审核前建议提前测试,避免出现审核被拒问题
内容的提问来源于stack exchange,提问作者Shani P
相关产品推荐
相关产品推荐

