日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

技术分享-bounds的深入认识

發(fā)布時(shí)間:2025/6/17 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术分享-bounds的深入认识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?MAKE BY - LJW -------轉(zhuǎn)載請注明出處-------??

前言:初學(xué)者對bounds的認(rèn)識是以自己的左上角為坐標(biāo)原點(diǎn),而且x/y一般是0,0 但是對bounds深入認(rèn)識之后,我們應(yīng)該對它重新認(rèn)識 以下是對bounds的一些認(rèn)識: bounds: x/y一般為(0,0)默認(rèn)矩形框和內(nèi)容是重疊的,所以默認(rèn)是(0,0) 改變一個(gè)控件的bounds x/y對控件不會(huì)影響,對子控件有影響 修改父控件的bounds為(20,20)那么子控件會(huì)相對于父控件上移(20,20) 一個(gè)控件的認(rèn)識: 起碼是由兩大塊組成: 1.矩形框:控件的顯示位置和尺寸 2.內(nèi)容:控件內(nèi)部的東西,比如它的子控件 bounds:以控件自己內(nèi)容的左上角為坐標(biāo)原點(diǎn),計(jì)算出來的矩形框位置和尺寸 所以,bounds是包含位置和尺寸的. frame:以父控件內(nèi)容左上角為坐標(biāo)原點(diǎn),計(jì)算出來的矩形框位置和尺寸 控件本身的位置尺寸是由frame決定的,所以修改bounds,父控件的位置是不會(huì)變的 變得是內(nèi)容的位置.而子控件的位置會(huì)隨著內(nèi)容的位置而改變 而此時(shí),子控件發(fā)生了偏移,但是子控件的frame不會(huì)發(fā)生改變,因?yàn)樽涌丶膄rame是以父控件內(nèi)容左上角為坐標(biāo)原點(diǎn)得,內(nèi)容偏移了(30,30),但是子控件跟隨著也偏移了(30,30),相對于內(nèi)容還是(0,0) - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {CGRect bounds = self.redView.bounds;bounds.origin = CGPointMake(30, 30);self.redView.bounds = bounds;NSLog(@"%@", NSStringFromCGRect(self.s.frame)); } 實(shí)際應(yīng)用: scrollview:往下拽,那么子控件的bounds的Y是負(fù)數(shù),往上拽,內(nèi)容往上走,Y值會(huì)越來越大 往左拽,內(nèi)容往左邊走,那么相對于內(nèi)容左上角為原點(diǎn),X就是正數(shù),越來越大 此時(shí),bounds的尺寸是不變的,還是矩形框的寬高 bounds對contentOffset的影響: scrollview往上下左右拽,contentOffset也會(huì)發(fā)生變化,而且變化的值跟bounds是一樣的,代表內(nèi)容的偏移 scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);

?

bounds對contentInset的影響: 設(shè)置內(nèi)邊距為64,那么內(nèi)容x會(huì)使-64,因?yàn)閮?nèi)容往下偏移了. 所以修改內(nèi)邊距,可能會(huì)永久修改bounds的值,往下拽松手控件跟頂部永遠(yuǎn)會(huì)保留64的間距? 實(shí)際應(yīng)用: tableView的cell設(shè)置額外的偏移量 self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
scrollview同樣;? 驗(yàn)證: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSLog(@"%@", NSStringFromCGPoint(tableView.bounds.origin)); }

打印一下結(jié)果:

所以,bounds的origin跟contentOffset的值是一樣的,而修改contentInset也會(huì)影響到這兩者.

?

?

當(dāng)一個(gè)控制器的scrollview套上一個(gè)導(dǎo)航控制器,那么scrollview里面的子控件會(huì)向下偏移64 就是說,處在導(dǎo)航控制器環(huán)境下,系統(tǒng)默認(rèn)會(huì)自動(dòng)調(diào)整距離頂部64的內(nèi)邊距, 那么bounds:-64 ?,偏移量也是-64 ? 是什么導(dǎo)致的呢? 隱藏導(dǎo)航條,那么距離頂部偏移量變成20,因?yàn)檫€有狀態(tài)欄的20. 這樣做是為了防止全屏使用scrollview時(shí)候擋住控件的顯示了,最明顯就是tableview的cell了 但是有多個(gè)scrollview情況下,只會(huì)調(diào)整一個(gè) 結(jié)論:哪個(gè)控件先添加,那么就調(diào)整誰. 但是很多情況是用不到的(一般用在tableview cell 比較常見).取消這種效果: 1.設(shè)置屬性 self.automaticallyAdjustsScrollViewInsets = NO;

2.設(shè)置相應(yīng)的偏移量抵消

self.scrollView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

?官方文檔描述

?TabBarController對contentInset的影響:

如果scrollview被套上NavigationController和TabBarController,滾動(dòng)到最上面,系統(tǒng)會(huì)自動(dòng)下移64,滾到最下面,增加49.保證里面內(nèi)容都能看到

iOS7之后,蘋果做出了這樣的效果,并且是可以穿透的.?但是只有TabBarController就不會(huì)有自動(dòng)調(diào)整

打印結(jié)果:

總結(jié):

frame和bounds的重新認(rèn)識

  • frame
    • 以父控件?內(nèi)容的左上角為坐標(biāo)原點(diǎn), 計(jì)算出的控件自己?矩形框的位置和尺寸
  • bounds
    • 以控件自己?內(nèi)容的左上角為坐標(biāo)原點(diǎn), 計(jì)算出的控件自己?矩形框的位置和尺寸
  • 概括
    • frame.size == bounds.size
    • scrollView.bounds.origin == scrollView.contentOffset
bounds和frame的區(qū)別

矩形框和內(nèi)容的理解

  • 矩形框
    • 控件自己的顯示位置和尺寸
  • 內(nèi)容
    • 控件內(nèi)部的東西,比如它的子控件

---恢復(fù)內(nèi)容結(jié)束---

轉(zhuǎn)載于:https://www.cnblogs.com/ljwiOS/p/5499227.html

總結(jié)

以上是生活随笔為你收集整理的技术分享-bounds的深入认识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。