iOS13 修改UISearchBar边框圆角失效

项目要求搜索栏有自定义边框颜色、背景色和圆角。

iOS 13 以前

取出searchBar的私有子view _UISearchBarSearchFieldBackgroundView,直接修改 borderWidth, cornerRadius修改即可。

iOS 13 以后失效

打印视图层级
可看到_UISearchBarSearchFieldBackgroundView 仍然存在,但修改失效。

Debug View Hierarchy 查看视图层级

可发现多了个UISearchTextField,且作为searchBar的属性可直接访问,这一点在 WWDC19演讲 - Modernizing Your UI for iOS 13 23分有提到

官网的搜索十分好用,展示了关键词在演讲视频的位置、可以直接跳转,且有中文字幕。
  • 关于searchBar的很多设置均可直接操作searchTextField,不用再hook或者KVC了,很多KVC在iOS 13都会崩溃。

顺便一提这部演讲介绍了iOS 13很多UI亮点功能,系统级别的新手势:双指下滑即多选,三指pinch即复制;搜索关键词UISearchTokenSheet下滑dismiss时更人性化的交互等等。有机会我再研究学习写篇文章。

话说回来,取到searchBar.searchTextField进行修改,边框生效,圆角却失效了

默认圆角比边框圆角大

这是由于searchTextField.borderStyle默认为UITextBorderStyleRoundedRect,自带圆角。修改为UITextBorderStyleNone,运行,OK~

其他参考

  • 腾讯开源UI组件QMUI_iOS 关于UISearchBar UISearchBar+QMUI.m 介绍了诸多定制和适配细节,值得学习~
  • PYSearch SearchBar 边框圆角设置不了

你可能感兴趣的:(iOS13 修改UISearchBar边框圆角失效)