layoutSubviews總結

ios layout機制相關方法

  1. - (CGSize)sizeThatFits:(CGSize)size
  2. - (void)sizeToFit

——————-

  1. - (void)layoutSubviews
  2. - (void)layoutIfNeeded
  3. - (void)setNeedsLayout

——————–

  1. - (void)setNeedsDisplay
  2. - (void)drawRect

layoutSubviews在下面情況下會被調用:

1、init初始化不會觸發layoutSubviews

???可是是用initWithFrame?進行初始化時,當rect的值不為CGRectZero時,也會觸發

2、addSubview會觸發layoutSubviews

3、設置view的Frame會觸發layoutSubviews,當然前提是frame的值設置前后發生了變化

4、滾動一個UIScrollView會觸發layoutSubviews

5、旋轉Screen會觸發父UIView上的layoutSubviews事件

6、改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件

在蘋果的官方文檔中強調:

??????You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.

?layoutSubviews, 當我們在某個類的內部調整子視圖位置時,須要調用。

反過來的意思就是說:假設你想要在外部設置subviews的位置,就不要重寫。

?刷新子對象布局

-layoutSubviews方法:這種方法,默認沒有做不論什么事情,須要子類進行重寫
-setNeedsLayout方法: 標記為須要又一次布局,異步調用layoutIfNeeded刷新布局,不馬上刷新,但layoutSubviews一定會被調用
-layoutIfNeeded方法:假設,有須要刷新的標記,馬上調用layoutSubviews進行布局(假設沒有標記,不會調用layoutSubviews)

假設要立即刷新,要先調用[view?setNeedsLayout],把標記設為須要布局,然后立即調用[view?layoutIfNeeded],實現布局

在視圖第一次顯示之前,標記總是“須要刷新”的,能夠直接調用[view layoutIfNeeded]

重繪

-drawRect:(CGRect)rect方法:重寫此方法,運行重繪任務
-setNeedsDisplay方法:標記為須要重繪,異步調用drawRect
-setNeedsDisplayInRect:(CGRect)invalidRect方法:標記為須要局部重繪

?

sizeToFit會自己主動調用sizeThatFits方法;

sizeToFit不應該在子類中被重寫,應該重寫sizeThatFits

sizeThatFits傳入的參數是receiver當前的size,返回一個適合的size

sizeToFit能夠被手動直接調用

sizeToFit和sizeThatFits方法都沒有遞歸,對subviews也不負責,僅僅負責自己

———————————-

layoutSubviews對subviews又一次布局

layoutSubviews方法調用先于drawRect

setNeedsLayout在receiver標上一個須要被又一次布局的標記,在系統runloop的下一個周期自己主動調用layoutSubviews

layoutIfNeeded方法如其名,UIKit會推斷該receiver是否須要layout.依據Apple官方文檔,layoutIfNeeded方法應該是這種

?layoutIfNeeded遍歷的不是superview鏈,應該是subviews鏈

drawRect是對receiver的重繪,能獲得context

setNeedDisplay在receiver標上一個須要被又一次畫圖的標記,在下一個draw周期自己主動重繪,iphone device的刷新頻率是60hz,也就是1/60秒后重繪

轉載于:https://www.cnblogs.com/mengfanrong/p/4291281.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三個彩燈循環點亮程序_近百組彩燈點亮江畔,義渡燈會正式亮燈啦

10月23日晚上,大渡口區義渡古鎮華燈初上。夜幕之下,2020第一屆義渡燈會亮燈儀式在此舉行,來自四川的近百組彩燈將在這里點亮夜空,一直陪伴廣大市民游客至明年元宵節后。當晚6點半,義渡燈會亮燈儀式正式開啟。本次燈會以…

repeater序列號,換頁數字不重新排

<td><%# Container.ItemIndex 1(Convert.ToInt32(this.drpCurrentPageIndex.SelectedValue)-1)*Convert.ToInt32(this.drpCount.SelectedValue)%></td>轉載于:https://www.cnblogs.com/liziqiang/p/3457203.html

Altera的幾個常用的Synthesis attributes(轉載)

各廠商綜合工具&#xff0c;對HDL綜合時都定義了一些綜合屬性這些屬性可指定a declaration,a module item,a statement, or a port connection 不同的綜合方式。 語法為&#xff1a; /* synthesis, <any_company_specific_attribute value_or_optional_value */ 下面就是Al…

QPushButton hover配置

鼠標移動到QPushButton上面時顯示下劃線 //下面是當鼠標移動到按鈕上時&#xff0c;按鈕上的文字顯示下劃線 QPushButton#Button_2:hover{ text-decoration:underline; }//下面是普通顯示 QPushButton#Button_2{ color:rgba(52, 144, 255 ,255); border-radius:0px; backgrou…

eclipse沒有日志_強化公共DHT以抵抗eclipse攻擊,ipfs官方還說了什么?

近日&#xff0c;IPFS官方發布博客&#xff0c;就如何強化公共DHT以抵抗eclipse攻擊進行詳細介紹&#xff0c;星球君幫大家翻譯了一下&#xff0c;讓我們來看看官方都說了什么吧&#xff1a;IPFS 2020 年的一個主要焦點是隨著網絡規模的不斷擴大而改進內容路由。雖然我們已經對…

mongoDB簡明教程-python(轉)

MongoDB是一個介于關系數據庫和非關系數據庫之間的產品&#xff0c;是非關系數據庫當中功能最豐富&#xff0c;最像關系數據庫的。他支持的數據結構非常松散&#xff0c;是類似 json的bjson格式&#xff0c;因此可以存儲比較復雜的數據類型。官方網站&#xff1a;http://www.mo…

HTTP基礎10--web(2)

因輸出值轉義不完全引發的安全漏洞 實施 Web 應用的安全對策可大致分為以下兩部分。 客戶端的驗證Web 應用端&#xff08;服務器端&#xff09;的驗證: 輸入值驗證 / 輸出值轉義客戶端允許篡改數據或關閉 JavaScript&#xff0c;不適合將 JavaScript 驗證作為安全的防范對策。保…

單一課和綜合課的劃分依據_武夷巖茶產地如何劃分?

產地是指某種物品的生產、出產或加工制造的地點&#xff0c;日常含義是指某種物品的主要生產地。本文探討的武夷巖茶種植產地&#xff0c;也就是當地茶人俗稱的“山場”。武夷巖茶“山場”的俗稱可能緣起于宋代的茶政。宋代官府設置“榷&#xff08;qu&#xff09;茶場”&#…

windows文件路徑大于MAX_PATH

如果文件路徑大于MAX_PATH&#xff0c;是無法直接用CreatFile、fopen等方法來打開文件 但是可以通過在路徑前面加上“\\?\”來獲取文件 比如想要打開下面的文件123.txt&#xff0c;但是文件路徑是很長的&#xff08;假設…是200個字符&#xff09;&#xff1a; C:\123...\1…

C# 枚舉 字符串 轉換

普通方法 這種方法盡管很SB但確實可以解決問題 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){string SelPath "";switch (comboBox1.SelectedIndex){case 0: SelPath System.Environment.GetFolderPath(System.Environment.SpecialFo…

arduino 機器視覺編程_萬物皆可仿真的MATLAB/Simulink神奇在哪?解析如何將其應用于一整套機器人設計開發流程...

MATLAB/Simulink&#xff1a;萬物皆可仿真 MATLAB是由美國MathWorks公司出品的一款商業數學軟件。它是一個多功能的科學計算平臺&#xff0c;將算法開發、數據分析、矩陣計算等諸多強大功能集成在一個易于操作的視窗環境中。MATLAB下的Simulink更是被認為可以“仿真任何系統”。…

排序算法(1) 快速排序 C++實現

快速排序基本特性 時間復雜度&#xff1a;O&#xff08;n*lgn&#xff09;最壞&#xff1a;O&#xff08;n^2&#xff09;空間復雜度&#xff1a;最好情況下&#xff1a;O&#xff08;lgn&#xff09;&#xff0c;最壞情況&#xff1a;O(n)&#xff0c;平均情況&#xff1a;O(l…

boost 變量類型轉換

如果vs版本比較低&#xff0c;會不支持一些std類型轉換函數&#xff08;vs2008就不支持&#xff09;&#xff0c;比如&#xff1a; std::to_string \\數字轉字符串 std::stoll \\字符串轉數字而且項目碰巧用boost庫&#xff0c;可以考慮用下面的的方法來進行類型轉換…

PB增刪改

新建一個數據窗口----選擇需要更新的表&#xff0c;或者直接寫sql也可以如下圖已經建立好的數據窗口&#xff0c;根據要求將需要更新的列、unigue key 還有需要更新的表設置好&#xff0c;【將需要更新列的taborder設置大于0 這樣維護的時候可以編輯&#xff08;等于0是不能編輯…

(五十六)iOS多線程之NSOperation

NSOpertation是一套OC的API&#xff0c;是對GCD進行的Cocoa抽象。 NSOperation有兩種不同類型的隊列&#xff0c;主隊列和自定義隊列。 主隊列運行于主線程上&#xff0c;自定義隊列在后臺運行。 【NSBlockOperation】 通過Block創建任務&#xff0c;下面比較主隊列和自定義隊列…

android 系統源碼調試 局部變量值_如何方便快速的整編Android 9.0系統源碼?

點擊上方“劉望舒”&#xff0c;選擇“星標”多點在看&#xff0c;就是真愛&#xff01;作者 : 劉望舒 | 來源 &#xff1a;劉望舒的博客地址&#xff1a;http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html前言在上一篇文章是時候下載Android 9.0系統源碼了中&…

boost 文件操作

如果要簡單處理文件和文件夾的時候&#xff08;刪除、重命名等&#xff09;&#xff0c;使用Windows的系統函數會十分麻煩&#xff0c;可以嘗試一下使用Boost庫來進行處理 頭文件 #include <boost/filesystem.hpp>如果要獲得每次處理的結果錯誤碼&#xff0c;需要加上頭…

讓“是男人就下到100層”在Android平臺上跑起來

原工程:https://github.com/jeekun/DownFloors 移植后的代碼&#xff1a;HelloCpp.zip 移植后的APK&#xff1a;HelloCpp.apk 說明&#xff1a;&#xff08;cocos2d-x版本是“ 2.2&#xff09; 1.該工程是直接在HelloCpp上修改完成,所以包名也不修改了 2.原工程里面可能是采用g…

Codeforces Round #277 (Div. 2) 題解

Codeforces Round #277 (Div. 2)A. Calculating Functiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputFor a positive integer n lets define a function f: f(n)???-?1??2?-?3??..??(?-?1)nn Your …

QT 邊框圓角處理

平時的邊框是平角的&#xff1a; 如果需要圓角的話&#xff0c;就要加stylesheet加上這個&#xff1a; border-radius:3px;比如&#xff1a; QPushButton{ border-radius:3px; }就變成圓角了&#xff1a; px前面的數字越大就越圓&#xff0c;比如5px比3px圓 假如只需要某一…