更新xcode13以后,編譯工程,導航欄的問題比較明顯。主頁問題是UINavigationBar部分屬性的設置在iOS15上是無效的
舊的代碼運行成了這樣的效果
截屏2021-11-01 下午4.35.49.png
下面是之前的的效果圖
截屏2021-11-01 下午4.19.03.png
最終在蘋果論壇看到了解決方案
在 iOS 15 中,UIKit 將 的使用擴展scrollEdgeAppearance到所有導航欄,默認情況下會產生透明背景。背景由滾動視圖何時滾動導航欄后面的內容來控制。您的屏幕截圖表明您已滾動到頂部,因此導航欄在滾動時選擇scrollEdgeAppearance了standardAppearance它,并且在以前版本的 iOS 上。
要恢復老樣子,你必須采用新UINavigationBar外觀的API, UINavigationBarAppearance。下面是兼容老版本寫法
let navigationBar = self.navigationController?.navigationBar
if #available(iOS 15, *) {
let app = UINavigationBarAppearance.init()
app.configureWithOpaqueBackground() // 重置背景和陰影顏色
app.titleTextAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize),
NSAttributedString.Key.foregroundColor: titleColor
]
app.backgroundColor = color // 設置導航欄背景色
app.shadowImage = imageWithColor(.clear) // 設置導航欄下邊界分割線透明
navigationBar?.scrollEdgeAppearance = app // 帶scroll滑動的頁面
navigationBar?.standardAppearance = app // 常規頁面
}else{
// 設置導航欄背景色
navigationBar?.barTintColor = color
// 設置導航條上的標題
navigationBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor:titleColor]
// 取消半透明效果
navigationBar?.isTranslucent = false
// 設置導航欄返回按鈕的顏色
navigationBar?.tintColor = UIColor.black
let naviItem = UIBarButtonItem.appearance()
naviItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.black,NSAttributedString.Key.font:UIFont.systemFont(ofSize: fontSize)], for: UIControl.State())
// 設置導航欄下邊界分割線透明
navigationBar?.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
navigationBar?.shadowImage = UIImage()
}