本篇內(nèi)容介紹了“iOS導(dǎo)航欄對(duì)控制器view的影響是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
為溧水等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及溧水網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站制作、溧水網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!前言
當(dāng)我們?cè)O(shè)置導(dǎo)航欄的某些屬性的時(shí)候會(huì)導(dǎo)致控制器View的布局不是從window的 (0,0)點(diǎn)開(kāi)始布局,會(huì)從導(dǎo)航欄底部開(kāi)始布局,而此時(shí)在 viewDidLoad 中 獲取到View的frame 確實(shí)從(0,0)開(kāi)始的,只有在 viewDidAppear中才能獲取到 view 最終的實(shí)際 frame
一些屬性
在了解 UINavigationBar之前,有必要了解 UINavigationBar 的一些屬性
///默認(rèn) default 半透明 black 黑色open var barStyle: UIBarStyle// 底部陰影橫線,默認(rèn)nil// 官方解釋還涉及到了一個(gè)設(shè)置背景圖片的方法 -setBackgroundImage:forBarMetrics:open var shadowImage: UIImage?// 7.0 以后已經(jīng)改變,修改bar 背景顏色 請(qǐng)使用 -barTintColoropen var tintColor: UIColor!// default is nil bar 的背景顏色open var barTintColor: UIColor?/// 影響比較大的屬性見(jiàn)下文,是否是半透明的open var isTranslucent: Bool // Default is NO on iOS 6 and earlier. Always YES if barStyle is set to UIBarStyleBlackTranslucent
一些條件
///當(dāng)前 控制器并不是 tableviewcontrollerself.view.backgroundColor = .cyanself.tableView.backgroundColor = .redself.navigationItem.title = "rootVC 標(biāo)題"tableView.frame = view.bounds
1.1 默認(rèn)導(dǎo)航欄 帶有半透明效果
此時(shí)view 和 tableview 和 導(dǎo)航欄布局
1 view全屏布局
2 tableview默認(rèn)從導(dǎo)航欄下部開(kāi)始布局
3 導(dǎo)航欄半透明
細(xì)節(jié) : 此時(shí)導(dǎo)航欄中的 _UIVisualEffectBackdropView 屬性變成紅色即 tableview的背景色
1.2 此時(shí)如果想讓tableview 從頂部開(kāi)始布局可添加代碼
if #available(iOS 11.0,*) { self.tableView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never; } else { self.automaticallyAdjustsScrollViewInsets = false; }
神奇的是 如果 tableview從頂部布局 此時(shí)導(dǎo)航欄中的 _UIVisualEffectBackdropView 屬性又會(huì)變成默認(rèn)白色
2 設(shè)置導(dǎo)航欄 isTranslucent屬性
isTranslucent 在6.0以后默認(rèn)是 true
如果設(shè)置為false
self.navigationController?.navigationBar.isTranslucent = false
此時(shí)布局
1 view 從導(dǎo)航欄底部布局
2 tableview 從view (0,0) 布局
3 導(dǎo)航欄不透明 _UIBarBackground 默認(rèn)為白色
3.1設(shè)置barTintColor
self.navigationController?.navigationBar.isTranslucent = trueself.navigationController?.navigationBar.barTintColor = UIColor.purple
此時(shí)布局和默認(rèn)一樣
1 view從 (0,0)布局
2 tableview從導(dǎo)航欄底部布局3 導(dǎo)航欄半透明
不同的是 UIVisualEffectView多加了一個(gè) _UIVisualEffectSubview 用來(lái)顯示我們自定義的背景色
其他兩個(gè) _UIVisualEffectSubview 和 _UIVisualEffectBackdropView view 用來(lái)實(shí)現(xiàn)半透明效果
3.2在 barTintColor基礎(chǔ)上設(shè)置 isTranslucent = false 屬性
結(jié)果 和 2 中的效果一樣。不同的是
_UIBarBackground 變成了我們自定義的顏色
4.1 設(shè)置 setBackgroundImage
設(shè)置一張純色圖片
self.navigationBar.setBackgroundImage(UIColor.mm_colorImgHex(color_vaule: hex,alpha: 1), for: UIBarPosition.any, barMetrics: .default)
此時(shí) 布局
1 view 從導(dǎo)航欄底部布局 view---(0.0, 88.0, 414.0, 808.0)
2 tableview 從(0,0) 布局
3 導(dǎo)航欄不透明
此時(shí)打印導(dǎo)航欄 isTranslucent屬性 為false也就是說(shuō)如果調(diào)用了setBackgroundImage會(huì)默認(rèn) 將 isTranslucent 置位 false
translate-----Optional(false)
4.2 我們?cè)?.1的情況下 修改 isTranslucent
在 viewWillAppear 中修改 isTranslucent 為 true
此時(shí)布局
1 view 全屏布局
2 tableview從導(dǎo)航欄底部頂部開(kāi)始布局
3 導(dǎo)航欄透明
此時(shí)打印我們的 _UIBarBackground 中的 BackgroundImage 透明度已被修改
<UIImageView: 0x7fbef1f0ce10; frame = (0 0; 414 88); alpha = 0.909804; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x600000cabd00>>
“iOS導(dǎo)航欄對(duì)控制器view的影響是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前文章:iOS導(dǎo)航欄對(duì)控制器view的影響是什么-創(chuàng)新互聯(lián)
路徑分享:http://aaarwkj.com/article32/pjcpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)、微信小程序、電子商務(wù)、企業(yè)建站、網(wǎng)站導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容