点击SearchBar时,我得到多条白线。
使用 TabBarController 和彩色条 NavigationController 时会发生这种情况,但
我使用以下代码行在 AppDelegate 中设置导航颜色:
UINavigationBar.appearance().barTintColor = UIColor(rgb: 0x0277BD)
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
我使用以下命令在 SearchViewController 中设置了UISearchController:
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
// Setup the Search Controller
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Events"
searchController.searchBar.tintColor = .white
navigationItem.searchController = searchController
definesPresentationContext = true
}
知道发生了什么事吗?
答案 0 :(得分:3)
不确定这是否是一个令人满意的答案,但它看起来像是一个iOS错误,可能与默认添加到顶部栏的半透明效果有关。顶部栏由两部分组成(导航和搜索),在上滑动画期间,似乎白线出现在导航部件的底部边缘。如果您向navigationController?.navigationBar.isTranslucent = false
添加viewDidLoad()
,问题就会消失。
为什么只有在UINavigationController
中嵌入UITabBarController
时才会显示白线?不知道:(
isTranslucent = false
事情充其量是一种解决方法,但也许就足够了。
答案 1 :(得分:0)
一个非常肮脏的解决方法是不增加透明度,而是添加一个小的“蒙版”视图:
let rect = CGRect(x: 0, y: navigationController.navigationBar.frame.height, width: navigationController.navigationBar.frame.width, height: 1.0)
let view = UIView(frame: rect)
view.backgroundColor = /* Your matching background color */
view.autoresizingMask = [.flexibleTopMargin]
navigationController.navigationBar.addSubview(view)
将此操作添加到viewDidAppear中,这是一次性操作。此解决方法不能完全隐藏导航过渡期间的问题。此问题是一个受此问题影响的人应向Apple报告的错误。