项目要求搜索栏有自定义边框颜色、背景色和圆角。
iOS 13 以前
取出searchBar
的私有子view _UISearchBarSearchFieldBackgroundView
,直接修改 borderWidth
, cornerRadius
修改即可。
iOS 13 以后失效
_UISearchBarSearchFieldBackgroundView
仍然存在,但修改失效。
可发现多了个UISearchTextField
,且作为searchBar
的属性可直接访问,这一点在 WWDC19演讲 - Modernizing Your UI for iOS 13 23分有提到
- 关于
searchBar
的很多设置均可直接操作searchTextField
,不用再hook或者KVC了,很多KVC在iOS 13都会崩溃。
顺便一提这部演讲介绍了iOS 13很多UI亮点功能,系统级别的新手势:双指下滑即多选,三指pinch即复制;搜索关键词UISearchToken
;Sheet
下滑dismiss时更人性化的交互等等。有机会我再研究学习写篇文章。
话说回来,取到searchBar.searchTextField
进行修改,边框生效,圆角却失效了
这是由于searchTextField.borderStyle
默认为UITextBorderStyleRoundedRect
,自带圆角。修改为UITextBorderStyleNone
,运行,OK~
其他参考
- 腾讯开源UI组件QMUI_iOS 关于
UISearchBar
UISearchBar+QMUI.m 介绍了诸多定制和适配细节,值得学习~ - PYSearch SearchBar 边框圆角设置不了