Has anyone managed to color the scopebar portion of a UISearchBar, it has a tintColor property but setting it does not affect the attached scopebar UISegmentedControl. Ive got a
Simply do the following to change the tint color of ScopeBar:
The below code is in C# (Xamarin)
SearchController.SearchBar.TintColor = UIColor.Green;
This is interesting, turns out the scope bar is a somewhat customised segmented control.
From the docs: UISegmentedControl uses this property only if the style of the segmented control is UISegmentedControlStyleBar.
Now the scope bar segmented control looks like UISegmentedControlStyleBar but isn't, it's some undocumented style:
NSLog(@"scope bar style is %d", scopeBar.segmentedControlStyle);
> scope bar style is 7
You can try this, which does actually set the tint but it looks like arse:
[scopeBar setSegmentedControlStyle:UISegmentedControlStyleBar];
[scopeBar setTintColor: UIColorFromRGB(0x990066)];
> scope bar style is 2
Internally there are some instance variables influencing this: _segementedControlFlags.style and _barStyle but you cannot hack those unless you bypass the sanctioned API.
The best course of action is to raise it with Apple and hope they include a fix in a future release.
The above approaches weren't working for me and I ended up using an iOS appearance method.
[[UISegmentedControl appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
Change the tint color for changing color of scope bar. Note BarTintColor is different - this will change the color of the search bar..
This solution is in Swift, can be adapted to objective-c. You can find the segmented control view using below function
func findSegmentedControl(view : UIView) -> UIView? {
for v in view.subviews {
if v is UISegmentedControl {
print(v)
return v
} else {
if let found = findSegmentedControl(view : v) {
return found
}
}
}
return nil
}
and then set tint color of the view. calling this function will be like this:
if let segmentedView = findSegmentedControl(view: searchController.searchBar) {
segmentedView.tintColor = UIColor.white
}
Another band-aid solution to this problem (and a less complicated one) is you could add a semi-transparent UIImageView over the top of the Search bar and Scope bar and change the background color of the UIImageView to your desired tint color.