IOS7的一個小改變
這段時間一直忙著專案中功能點的實現,對介面上的東西沒有過多的注意,昨天我把美工剛給我設計好的介面拿過來,打算調整一下程式的介面,我發現了一個問題……
好了,不羅嗦了,進入主題
因為我這個介面主要是用來展示圖書列表的,因此上滿加了一個scrollView,這樣可以展示多於一屏的介面,當我按照美工設計的尺寸往scrollView上加圖的以後,每次執行發現圖片在scrollView上的顯示都有向下一段畫素的偏移,我仔細的檢查了一遍又一遍的程式碼,也沒有發現問題。我剛開始想的是圖片的偏移是不是因為那裡更改了scrollView的contentOffset屬性被修改了,我查詢了程式碼中這個屬性,結果沒發現。經過斷點除錯,我從堆疊裡的資訊裡發現從程式執行開始到執行到斷點之前,系統已經執行了很多功能,從裡面我發現NavigationController,做了很多事情,再看介面,這個介面上面確實有NavigationBar的存在,我目測一下,下移的高度和NavigationBar+statuBar的高度,我從建立到最後執行這段程式碼這兩處分別都列印了scrollView.contentOffset.y的值,結果發現沒變!這更讓我無法接受了!!明明是下移了,但是為什麼列印出來沒有改變呢?
我用了剛學的一個監測系統內部變數狀態變化的方法:就是在建立scrollView的同時新建立一個執行緒,來不斷的監聽scrollView.contentOffset.y的值從建立到最終加到螢幕上後這段時間內的變化,結果我發現列印的結果是0.0--64.0--0.0!這說明系統預設對scrollView.contentOffset.y做了64個畫素的偏移,這讓我不能理解了。這是為什麼呢?我又仔細查詢了scrollView的相信介紹,發現加在scrollView上的view的顯示同時受到以下三個屬性的限制:contentOffset,contentSize和contentInset這三者的限制,前兩個屬性我們都知道,也一直在用,這是這第三個屬性一直都沒用過甚至都不知道它的存在。
經過一番查詢我發現:從IOS7之後,桌面的座標原點相對以前發生了變化,在IOS7以前的系統,如果介面上加了statuBar後,座標原點會相對原來的(0,0)下移至(0,20),如果介面上再同時出現了NavigationBar之後座標原點就會下移到(0,64)的位置,這時候你列印self.view.frame的時候你會發現,他的frame會變成(0,0,320,416)。但是到了IOS7以後,就有了變化。這是因為新系統採用了完全不一樣的風格,系統的各種用於導航的空間都採用了半透明的設定,這樣使得使用者能夠透過這些控制元件看到它背後的東西,因此view的座標原點一直都沒有變化,但是它比較智慧,為了讓你少做工作,它把scrollView.contentInset做了一個便宜,如果介面上有statuBar存在它就將scrollView.contentInset.top設定為20,如果還有NavigationBar那就設定為64,這樣使得contentSize這個框向下移動了指定的畫素,移動好以後,又把contentOffset的屬性設定為(0,0),好像什麼也沒發生一樣。
總結一下:IOS7系統以後,view的定點一直都在左上角,不管介面是不是有狀態列和導航欄。還有就是如果有狀態列或者導航欄,你在使用scrollView的時候,它會很智慧的講內部試圖向下做個偏移。(我覺得他這種智慧是多餘的,還是讓我們自己做好了)
當然這只是我個人的拙見,如果牛人路過發現有什麼不對的地方,還請幫忙給指出來,謝謝了!
相關文章
- 基於sql最佳化,rule的使用小改動大變化SQL
- 【maven】Maven打包後為何檔案大小改變了Maven
- 監聽視窗大小改變,同時根據視窗大小修改某個元素的大小
- iOS7 最佳實踐:一個天氣應用案例(上)iOS
- iOS7 最佳實踐:一個天氣應用案例(下)iOS
- hey工具小改造
- The Colors OF IOS7iOS
- 通過iOS人機互動指南的變化看iOS7的設計理念iOS
- 一個檔案的內容變成一個 go 語言的變數的小工具Go變數
- Swift 返回一個漸變的 UIImageViewSwiftUIView
- 繫結變數的一個例子變數
- uni-app踩坑+小改造APP
- 真正的讓iframe自適應高度 相容多種瀏覽器隨著視窗大小改變瀏覽器
- iOS7滑動返回iOS
- 免費遊戲中的行為經濟學:1點小改變帶來10倍付費轉化遊戲
- 關於SAP ABAP字元變數和字串變數字元個數的一個知識點,和一個血案字元變數字串
- 淺析一個函式呼叫另一個函式的變數函式變數
- ios7新特性nsurlsession初探iOSSession
- 論如何監聽一個物件的變化物件
- 關於ThreadLocal變數的一個坑thread變數
- 智慧城市:一個體系的變革之路
- 一個奇特的mac地址自動變化Mac
- 華納雲:linux怎麼將一個變數賦給另一個變數Linux變數
- 在一個元素上:hover,改變另一個元素的css屬性CSS
- 一鍵變老,一鍵還童,一鍵變性!這個全球霸屏的 FaceApp 到底是個啥?APP
- 第一個CSS變數:currentColorCSS變數
- 如何保證一個類中的例項變數不被改變變數
- ios7 UILabel sizeWithFont方法的最新寫法iOSUI
- ios7中引入的新類:nsprogress介紹iOS
- 新樹莓派作業系統更新帶來一些不錯的小改進樹莓派作業系統
- Oracle10g sqlplus小改進OracleSQL
- php中的動態變數的一個應用PHP變數
- 從一個修改私有變數的問題想到的變數
- 免費遊戲中的行為經濟學:1點小改變帶來10倍付費轉化的定價策略遊戲
- 記錄一個關於變數命名的事情變數
- javascript變數宣告需要注意的一個地方JavaScript變數
- 一個變相的服務端渲染系統服務端
- 請教設計一個流程多變的模式模式