2021年了,現(xiàn)在才寫這個贸伐,太遲了點勘天,但還是有很多人用的是iphone8及以下的手機,而且還有很多ioser對劉海屏的適配太過繁瑣了點,所以在空閑時間寫了這個來方便大家脯丝,不廢話商膊,上代碼
下面用到了第三方庫SnapKit
class TextViewController : UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.isHidden = true
let navView = UIView()
view.addSubview(navView)
view.backgroundColor = .white
navView.backgroundColor = .red
navView.snp.makeConstraints{
$0.leading.trailing.equalToSuperview()
$0.top.equalToSuperview()
$0.bottom.equalTo(view.safeAreaLayoutGuide.snp.top).offset(60) //view的實際高度
}
}
}
劉海屏效果圖
效果圖
效果如圖,可以看到宠进,劉海也覆蓋到了晕拆,而不用加判斷:
是否劉海屏 ?44 : 0
更進一步可以增加一個baseView來放置控件材蹬,如返回按鈕等实幕,當(dāng)然可以不加,我一般都會加赚导,因為這樣更好做約束:
let base = UIView()
navView.addSubview(base)
base.backgroundColor = .yellow
base.snp.makeConstraints{
$0.top.equalTo(navView.safeAreaLayoutGuide)
$0.leading.trailing.bottom.equalToSuperview()
}
let button = UIButton()
button.backgroundColor = .blue
base.addSubview(button)
button.snp.makeConstraints{
$0.leading.equalTo(20)
$0.centerY.equalToSuperview()
$0.size.equalTo(50)
}
劉海屏效果圖
效果圖
這樣的適配當(dāng)然不止是自定義導(dǎo)航欄茬缩,幾乎用到safearea的地方都可以做類似的適配。
下面是和原生導(dǎo)航欄的對比圖吼旧,貌似他們應(yīng)該也是這樣做約束的:
自定義
原生
好了凰锡,這次的分享就這樣,有問題可以評論留言圈暗,或者發(fā)郵件289193866@qq.com掂为,郵件會很快回,評論的話得看下次什么時候來簡書了