寻找更新后的( iOS 13 )答案后,我没有找到任何解决此简单问题的方法:
如何更改 {{1 }} 在 textColor
中的占位符?
我的应用程序无法处理 UISearchBar
模式。我不希望系统更改我的 Light/Dark
文本颜色。我希望它始终为UIPlaceHolder
。
white
我希望这段代码能正常工作。我认为新的属性 if #available(iOS 13.0, *) {
let attrString = NSMutableAttributedString(string: "My PlaceHolder")
attrString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], range: NSRange(location: 0, length: attrString.length))
searchController.searchBar.searchTextField.attributedPlaceholder = attrString
}
可以使自定义searchTextField
的工作变得更加容易。
编辑:
这种代码类型可以在UISearchBar
方法中起作用:
viewDidAppear
问题在于,当您上下滚动时颜色会发生变化。
答案 0 :(得分:2)
正如您已经提到的,您的代码仅在viewDidAppear
中起作用,这使占位符从默认的灰色闪烁到首选的颜色。
但是,viewDidAppear
似乎要过一段时间(确切时间我无法弄清楚),才能在视图实际出现之前更改占位符。
我想,这可能与iOS如何处理亮/暗模式和/或iOS错误有关。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
let placeholder = NSAttributedString(string: "Search",
attributes: [
.foregroundColor: UIColor.white
])
let searchTextField = searchBar.searchTextField
// Very nasty hack to be able to set attributedPlaceholder
// in iOS 13 without flickering
DispatchQueue.global().async {
for _ in 0...10 {
usleep(30_000)
DispatchQueue.main.async {
searchTextField.attributedPlaceholder = placeholder
}
}
}
}
}
此方法似乎没有性能和/或其他缺点,除了那真是令人讨厌...
如果其他人有更好的方法,请随时合作。
答案 1 :(得分:0)
您可以使用UITextField
appearance
属性进行设置。检查这行代码
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
答案 2 :(得分:0)
我想它不起作用的原因可能是您得到的searchController.searchBar.searchTextField = nil
。
searchTextField
是iOS 13
的新属性,如果仅支持>= iOS 13
,则可以完成此操作。如果要适应iOS 13
的先前版本,可以遍历UISearchBar
来找到UISearchBarTextField
,然后直接设置找到的UISearchBarTextField
。
我查找的代码可能是这样的,我将其放在Category
的{{1}}中。
UIView
使用时,您可以自定义- (UIView *)findChildViewClass:(Class)childViewClass fromView:(UIView *)fromView{
for (UIView *subView in fromView.subviews) {
if ([subView isMemberOfClass:childViewClass]) {
return subView;
}
UIView *finalView = [self findChildViewClass:childViewClass fromView:subView];
if (finalView) {
return finalView;
}else{
continue;
}
}
return nil;
}
属性以从searchTextField
继承以保存找到的值。
UITextField
这是我现在使用的,它正在工作,希望对您有用。