我知道这个问题在SO上已经被问了很多次。然而,就像苹果一直以来所做的那样,在发布 iOS 11后,他们似乎对UISearchBar
进行了一个看似不必要的更改,具体而言是它的视图层次结构。
此外,搜索栏的“文本字段”不再可以在搜索栏的子视图中访问,导致之前所有旧的解决方案都无法“访问”和更改文本字段的背景颜色,或者更改文本字段的任何属性。
- 有人知道如何在iOS 11中实际调整搜索栏的背景颜色吗?
FYI: 我特别指的是文本后面的颜色...现在默认为白色,除非您将搜索栏样式指定为minimal。
UPDATE 1:
自从我发布这个问题以来,我仍然没有找到有效或真正的解决方案来解决这个问题。最接近的解决方案似乎是深入研究外观属性。
[[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;
您可以开始绘制一个新的背景视图,以放置在该视图后面。但是,我发现要进一步追求的问题是,绘制具有正确框架/边界的视图,以精确模仿原始背景,这些问题太烦琐了。
希望有人能找到这个问题的真正解决方案。苹果错过了不错。。。
let textfield = scb.value(forKey: "searchField") as? UITextField
。我认为这违反了苹果的条款和条件,因为这实际上是访问私有API,不是吗? - Will Von Ullrich