技术分享-bounds的深入认识
生活随笔
收集整理的這篇文章主要介紹了
技术分享-bounds的深入认识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?MAKE BY - LJW -------轉載請注明出處-------??
前言:初學者對bounds的認識是以自己的左上角為坐標原點,而且x/y一般是0,0 但是對bounds深入認識之后,我們應該對它重新認識 以下是對bounds的一些認識: bounds: x/y一般為(0,0)默認矩形框和內容是重疊的,所以默認是(0,0) 改變一個控件的bounds x/y對控件不會影響,對子控件有影響 修改父控件的bounds為(20,20)那么子控件會相對于父控件上移(20,20) 一個控件的認識: 起碼是由兩大塊組成: 1.矩形框:控件的顯示位置和尺寸 2.內容:控件內部的東西,比如它的子控件 bounds:以控件自己內容的左上角為坐標原點,計算出來的矩形框位置和尺寸 所以,bounds是包含位置和尺寸的. frame:以父控件內容左上角為坐標原點,計算出來的矩形框位置和尺寸 控件本身的位置尺寸是由frame決定的,所以修改bounds,父控件的位置是不會變的 變得是內容的位置.而子控件的位置會隨著內容的位置而改變 而此時,子控件發生了偏移,但是子控件的frame不會發生改變,因為子控件的frame是以父控件內容左上角為坐標原點得,內容偏移了(30,30),但是子控件跟隨著也偏移了(30,30),相對于內容還是(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)); } 實際應用: scrollview:往下拽,那么子控件的bounds的Y是負數,往上拽,內容往上走,Y值會越來越大 往左拽,內容往左邊走,那么相對于內容左上角為原點,X就是正數,越來越大 此時,bounds的尺寸是不變的,還是矩形框的寬高 bounds對contentOffset的影響: scrollview往上下左右拽,contentOffset也會發生變化,而且變化的值跟bounds是一樣的,代表內容的偏移 scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);?
bounds對contentInset的影響: 設置內邊距為64,那么內容x會使-64,因為內容往下偏移了. 所以修改內邊距,可能會永久修改bounds的值,往下拽松手控件跟頂部永遠會保留64的間距? 實際應用: tableView的cell設置額外的偏移量 self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);scrollview同樣;? 驗證: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSLog(@"%@", NSStringFromCGPoint(tableView.bounds.origin)); }
打印一下結果:
所以,bounds的origin跟contentOffset的值是一樣的,而修改contentInset也會影響到這兩者.
?
?
當一個控制器的scrollview套上一個導航控制器,那么scrollview里面的子控件會向下偏移64 就是說,處在導航控制器環境下,系統默認會自動調整距離頂部64的內邊距, 那么bounds:-64 ?,偏移量也是-64 ? 是什么導致的呢? 隱藏導航條,那么距離頂部偏移量變成20,因為還有狀態欄的20. 這樣做是為了防止全屏使用scrollview時候擋住控件的顯示了,最明顯就是tableview的cell了 但是有多個scrollview情況下,只會調整一個 結論:哪個控件先添加,那么就調整誰. 但是很多情況是用不到的(一般用在tableview cell 比較常見).取消這種效果: 1.設置屬性 self.automaticallyAdjustsScrollViewInsets = NO;2.設置相應的偏移量抵消
self.scrollView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);?官方文檔描述
?TabBarController對contentInset的影響:
如果scrollview被套上NavigationController和TabBarController,滾動到最上面,系統會自動下移64,滾到最下面,增加49.保證里面內容都能看到
iOS7之后,蘋果做出了這樣的效果,并且是可以穿透的.?但是只有TabBarController就不會有自動調整
打印結果:
總結:
frame和bounds的重新認識
- frame
- 以父控件?內容的左上角為坐標原點, 計算出的控件自己?矩形框的位置和尺寸
- bounds
- 以控件自己?內容的左上角為坐標原點, 計算出的控件自己?矩形框的位置和尺寸
- 概括
- frame.size == bounds.size
- scrollView.bounds.origin == scrollView.contentOffset
矩形框和內容的理解
- 矩形框
- 控件自己的顯示位置和尺寸
- 內容
- 控件內部的東西,比如它的子控件
---恢復內容結束---
轉載于:https://www.cnblogs.com/ljwiOS/p/5499227.html
總結
以上是生活随笔為你收集整理的技术分享-bounds的深入认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ 3.6 安装
- 下一篇: python成长之路——第四天