iOS11自定義導(dǎo)航欄上移及適配iPhone X問題

最近在自己練手的APP中遇到自定義導(dǎo)航欄上移的問題,參考了諸多大神的帖子,最后自己整理一下iOS11自定義導(dǎo)航欄上移問題的解決方法。先來看下問題截圖:

1、導(dǎo)航欄出現(xiàn)的問題

出現(xiàn)的問題

解決后圖片:

解決后圖片

2、解決方法,歸根到底就是iOS11系統(tǒng)的導(dǎo)航欄圖層發(fā)生變化,遍歷View,修改frame,新建繼承navigationbar的類,重寫layoutsubviews方法,isiPhoneX為判斷iPhone X宏,直接上代碼:

OC代碼:

- (void)layoutSubviews {
    [super layoutSubviews];
#ifdef __IPHONE_11_0
    if (@available(iOS 11.0, *)) {
        for (UIView *view in self.subviews) {
            if([NSStringFromClass([view class]) containsString:@"Background"]) {
                view.frame = self.bounds;
            }
            else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
                CGRect frame = view.frame;
                frame.origin.y = isiPhoneX ? 44 : 20;
                frame.size.height = self.bounds.size.height - frame.origin.y;
                view.frame = frame;
            }
        }
    }
#endif
}

Swift代碼:

    override func layoutSubviews() {
        super.layoutSubviews()
        for subview in subviews {
            let subName = NSStringFromClass(subview.classForCoder)
            if subName == "_UIBarBackground" {
                subview.frame = bounds
            }else if subName == "_UINavigationBarContentView" {
                var frame = subview.frame;
                frame.origin.y = isiPhoneX ? 44 : 20
                frame.size.height = self.bounds.size.height - frame.origin.y;
                subview.frame = frame;
            }
        }
    }

如有問題請(qǐng)溝通。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容