1. 程式人生 > >升級xCode9 導航欄變化及一些小技巧

升級xCode9 導航欄變化及一些小技巧

導航欄

導航欄高度的變化

iOS11之前導航欄預設高度為64pt(這裡高度指statusBar + NavigationBar),iOS11之後如果設定了prefersLargeTitles = YES則為96pt,預設情況下還是64pt,但在iPhoneX上由於劉海的出現statusBar由以前的20pt變成了44pt,所以iPhoneX上高度變為88pt,如果專案裡隱藏了導航欄加了自定義按鈕之類的,這裡需要注意適配一下。

導航欄圖層及對titleView佈局的影響

iOS11之前導航欄的title是新增在UINavigationItemView上面,而navigationBarButton則直接新增在UINavigationBar上面,如果設定了titleView,則titleView也是直接新增在UINavigationBar上面。iOS11之後,大概因為largeTitle的原因,檢視層級發生了變化,如果沒有給titleView賦值,則titleView會直接新增在_UINavigationBarContentView上面,如果賦值了titleView,則會把titleView新增在_UITAMICAdaptorView上,而navigationBarButton被加在了_UIButtonBarStackView上,然後他們都被加在了_UINavigationBarContentView上,如圖:

所以如果你的專案是自定義的navigationBar,那麼在iOS11上執行就可能出現佈局錯亂的bug,解決辦法是重寫UINavigationBar的layoutSubviews方法,調整佈局,上程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 - (void)layoutSubviews { [super layoutSubviews]; //注意導航欄及狀態列高度適配 self.frame = CGRectMake(
00, CGRectGetWidth(self.frame), naviBarHeight); 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 = statusBarHeight; frame.size.height = self.bounds.size.height - frame.origin.y; view.frame = frame; } } }

再補充一點,看了簡書App適配iOS11發現titleView支援autolayout,這要求titleView必須是能夠自撐開的或實現了- intrinsicContentSize方法

1 2 3 - (CGSize)intrinsicContentSize { return UILayoutFittingExpandedSize; }

UIScrollView、UITableView、UICollectionView

大家在iOS11裝置上執行出現最多問題應該就是tableview莫名奇妙的偏移20pt或者64pt了。。原因是iOS11棄用了automaticallyAdjustsScrollViewInsets屬性,取而代之的是UIScrollView新增了contentInsetAdjustmentBehavior屬性,這一切的罪魁禍首都是新引入的safeArea,關於safeArea適配這篇文章iOS 11 安全區域適配總結講的很詳細,感興趣的可以看下,我直接貼適配程式碼,因為低版本直接用contentInsetAdjustmentBehavior會報警告,所有定義瞭如下的巨集(感謝@炒雞範的指正,之前的巨集犯了個低階錯誤...現改為)

1 2 3 4 5

相關推薦

升級xCode9 導航變化一些技巧

導航欄 導航欄高度的變化 iOS11之前導航欄預設高度為64pt(這裡高度指statusBar + NavigationBar),iOS11之後如果設定了prefersLargeTitles = YES則為96pt,預設情況下還是64pt,但在iPho

網絡配置註意事項一些竅門

達內 網絡 安全 竅門 思科 華為1、建議老設備加入現網:(1)IOS配置更新成與現網一致的;(2)所有的配置清除;(3)確認無誤後再上線。2、思科IOS快捷鍵: CTRL+A/CTRL+E,將光標快速移動到命令最前面/最後面。在執行show running-config以後直接結束顯示回到命令輸入狀態,按t

WebStormemmet插件使用中的一些技巧(持續更新)

TE sublime 上一個 最大化 lpad prev web 組成 toggle Ctrl+/ 或 Ctrl+Shift+/ 註釋(// 或者/*…*/ ) Shift+F6 重構-重命名 Ctrl+X 刪除行 Ctrl+D 復制行 Ctrl+G

Android抽屜式導航使用相關類認識

抽屜式導航欄官方推出好久了,之前也使用過,但對這些類都是懵懵懂懂的。今天認真看了下文件才把這些類搞清楚。個人對MD的設計風格還是很喜歡的。 DrawerLayout DrawerLayout是一個視窗內容的頂層容器(像LinearLayout、Frame

表格外掛bootstrapTable中隱藏和顯示某列一些注意點

html程式碼: <table id="docDateTable" class="table table-hover table-bordered" style="color: #000000"> <thead style="back

微信程式之仿android fragment之可滑動的底部導航例項 —— 微信程式實戰系列(4)

底部3-5個選項的底部導航欄,目前在移動端上是主流佈局之一 因此騰訊官方特地做了,可以通過設定,就可以做出了一個底部的導航欄 但是通過設定的這個底部的導航欄,功能上比較固定,它必須要設定與它對應的一個頁面,而且並不能滑動。 在業務上,有時候會比較限制,並不能完全滿足所需

iOS設定導航背景字型顏色--Nav

###1、返回item顏色 [self.navigationController.navigationBarsetTintColor:[UIColorwhiteColor]] 2、導航欄背景 [self.navigationController.navig

使用vue-cli構建vue工程,一些坑的記錄

這篇文章主要記錄如何構建一個vue工程,及踩到過的坑 使用vue+webpack+vue-router+vuex+axios+elementUI+jQuery+一些jQuery外掛 一、使用vue-cli建立一個vue的工程 涉及到的命令包括:

Liferay 7 OSGi的一些技巧

liferay packages res ges shell portlet 依賴 include log 如果部署一個portlet到Liferay上,編譯沒有出現任何錯誤,卻提示有沒有解決的依賴,可能出現的問題是,我們這個portlet所需要的這個jar包在這個OSGi

vim一些技巧

小技巧 編輯器 組合鍵 鍵盤vi 1.vim編輯器的替換模式與可視模式在一般模式下按鍵盤上的r和R進入替換模式。如果按小r那麽這時候就進入了替換模式,你下一個輸入的字符會把你當前光標所在處的字符替換,然後自動退出替換模式。如果你按的是大R那麽你下面輸入的所有字符會把後面的字符依次替換,直到按退

JS開發中的一些技巧和方法

hello floor apply subst shuf 新的 情況 level 可能 生成指定範圍內的隨機數 當我們需要獲取指定範圍(min,max)內的整數的時候,下面的代碼非常適合;這段代碼用的還挺多的。 function setRadomNum(min,m

Java在處理大數據的時候一些技巧

主線程 成本 寫入 exce 得到 拆分 是的 很多 會有  http://soft.chinabyte.com/database/258/12609258.shtml 眾所周知,java在處理數據量比較大的時候,加載到內存必然會導致內存溢出,而在一些數據處理中我們不得不去

獻身說法---修復bug時的一些技巧

throw 修復bug () 關閉 遠程 style pre col 文件 最近,修復了項目當中的一些bug,覺著有些思路可以分享出來供大家借鑒。 場景一 開發環境中系統正常運行,測試環境中,部分機器未能正常運行。 解決過程:遠程連接了測試環境中的機器,觀察了系統的運行情況

webstorm的一些技巧

覆蓋 左右 tor color 字體 web 保存 行號 log 1.怎樣禁止自動保存文件:   設置--->外觀和行為--->常規--->Synchronization--->要麽四個全不選,要麽把最後兩個不選   Settings--->

關閉Xshell警告音等一些技巧

甘兵 xshell xshell關閉聲音 xshell使用技巧 一、關閉Xshell警告音相信很多朋友在使用Xshell的過程中都遇到過,有時候按Tab補全鍵老是發出翁翁刺耳的聲音,下面介紹一個小方法可以解決這個現象:“工具”--“選項”--勾選“禁用鈴聲”,如下圖:二、在使用Xshell時,

多路由器環境配置的一些技巧(達內)

總結 color 條目 nag 知識 rip路由 內網 限制 images rip 的簡單應用,希望通過這個可以讓幹運維的同仁輕松一點實驗拓撲圖:實驗需求:當內網中有很多路由器或多層交換機是,不同網段間通信 ,需要配置動態路由,如手動配置很浪費時間,容易出錯,可以選擇使用r

js 中的一些技巧

技巧 def 對象 bar 維護 方式 undefine can 常用 js 數字操作: 1.1 取整: 取整有很多方法如: parseInt(a,10); Math.floor(a); a>>0; ~~a; a|0; 前面2種是經常用到的,後面3中算是比

html5的一些技巧,持續補充ing

pre 補充 body 小技巧 input log gpo date 自動 HTML <label> 標簽的 for 屬性 用處:項目中常有點擊label標簽自動勾選/取消radio的需求,之前都是js動態實現的啊啊啊,相見恨晚,23333 顯式的聯系:

ViewPager使用中的一些技巧

android viewpager 懶加載 1、使用setOffscreenPageLimit()方法可以限制它一次加載幾頁,它的默認值1,google建議也是維護一下小的加載頁數3-4; 但是只要手機性能稍微弱一點和系統內存更不上,都會導致切換的時候出現部分數據顯示不出,白屏;尤其是在紅米系統,

2018-05-22 CSS 左右布局、左中右布局以及一些技巧

add www. 分享 適應 line -o pad 默認 改變 1、左右布局 如果有以下html結構,設置左右兩欄布局 <div class="parent"> <div class="leftChild"></div> <