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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios 之 autoresizing小解

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 之 autoresizing小解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于IOS的app開發人員來說,不會像Android開發人員一樣為非常多的屏幕尺寸來做界面適配,因此硬編碼的坐標也能工作良好,可是從設計模式上來說這不是好的做法。

并且也另一些問題,如iPhone5的適配,橫豎屏的切換等。也許你能夠做兩套UI方案來做適配,可是這樣添加反復工作量。并且不夠高端,萬一有出新的屏幕大小了呢。哲理就將介紹IOS中的兩大自己主動布局利器:Autoresizing?和?Autolayout。

autoresizing是UIView的屬性。一直都有,使用簡單,可是沒有autolayout強大。autolayout是IOS6以后的新技術,更加強大。本文主要介紹Autoresizing的特性和使用方法。

1. Autoresizing特性

當UIView的autoresizesSubviews是YES時。(默認是YES), 那么在當中的子view會依據它自身的autoresizingMask屬性來自己主動適應其與superView之間的位置和大小。

autoresizingMask是一個枚舉類型, 默認是UIViewAutoresizingNone, 也就是不會autoresize:

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 };

這個枚舉類型,使用了?1 << n?這種寫法來定義。代表了它能夠復選。假設你不明確為什么。能夠復習下“位運算”。 那么這些值分別代表什么意思呢?

事實上怎樣理解這幾個值非常easy,那就是從xib里面看。 我們在一個xib文件里,取消勾選autolayout,(默認使用autolayout時。autoresizing看不到)。那么我們能夠在布局那一欄看到怎樣設置autoresizing.

上圖說明了在xib中設置的這些線條和實際屬性相應的關系。這當中須要注意的是,當中4個margin虛線才代表設置了該值,而width和height是實線代表設置了該值,不能想當然的理解。

這些項分別代表:

autoresizingMask是子視圖的左、右、上、下邊距以及寬度和高度相對于父視圖按比例變化。比如:

UIViewAutoresizingNone 不自己主動調整。

UIViewAutoresizingFlexibleLeftMargin 自己主動按比例調整與superView左邊的距離,且與superView右邊的距離不變。

UIViewAutoresizingFlexibleRightMargin 自己主動按比例調整與superView的右邊距離,且與superView左邊的距離不變。

UIViewAutoresizingFlexibleTopMargin ?自己主動按比例調整與superView的頂部距離,且與superView底部的距離不變。

UIViewAutoresizingFlexibleBottomMargin?自己主動按比例調整與superView的底部距離,且與superView頂部的距離不變。

UIViewAutoresizingFlexibleWidth?自己主動按比例調整寬度。

UIViewAutoresizingFlexibleHeight?自己主動按比例調整高度。

UILabel*????label = [[UILabel?alloc]?initWithFrame:CGRectMake(50,?100,?200,?40)];

[label?setAutoresizingMask:?UIViewAutoresizingNone]; ?控件相對于父視圖坐標值不變 ??

CGRectMake(50,?100,?200,?40) UIViewAutoresizingFlexibleWidth:控件的寬度隨著父視圖的寬度按比例改變 ???比如 label寬度為 100 ????屏幕的寬度為320 ?????????當屏幕寬度為480時 ?????label寬度 ?變為 ?100*480/320

以上這些都較易理解, 可是autoresizing另一些組合場景。那就是組合使用的場景。

autoresizingMask 說明 xib預覽效果
None view的frame不會隨superview的改變而改變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)
TopMargin | BottomMargin view與其superView的上邊距和下邊距的比例維持不變
LeftMargin | RightMargin view與其superView的左邊距和右邊距的比例維持不變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)
LeftMargin | RightMargin | TopMargin | BottomMargin view與其superView的上下左右邊距的比例維持不變
LeftMargin | Width view與其superView的右邊距的比例維持不變, 左邊距和width按比例調整(右圖的xib中預覽效果與實際效果有差。實際效果是view的上邊距不變)
LeftMargin | Width | RightMargin 左邊距、右邊距、寬按比例調整。(右圖的xib中預覽效果與實際效果有差。實際效果是view的上邊距不變)垂直方向是相同效果。故不列舉
Width | Height 自己主動調整view的寬和高,保證上下左右邊距不變。如把tableView設置為此屬性,那么不管viewController的view是多大,都能自己主動鋪滿

上面并未列舉全部組合場景,可是已經足夠我們理解?autoresizing?了。

2. 小結

Autoreszing的最常見的有用場景就是iPhone5的兼容了。

比方我們想要設置tableView的frame,那我們僅僅須要在初始化設置frame之后將tableView的autoresizingMask設置為UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight?即可了。

還有一種比方我們想要一個view一直停留在其superview的最下方,那么我們在初始化設置frame之后僅僅須要將autoresizingMask設置為UIViewAutoresizingFlexibleTopMargin?就能夠了。

autorezingMask簡單的一個屬性。理解它之后能夠讓非常多事情變得簡單。

轉載于:https://www.cnblogs.com/yfceshi/p/7240928.html

總結

以上是生活随笔為你收集整理的ios 之 autoresizing小解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。