您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何通過frame適配以及AutoLayout”,在日常操作中,相信很多人在如何通過frame適配以及AutoLayout問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何通過frame適配以及AutoLayout”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
屏幕適配的目的
目的一:
不同型號的iPhone和iPad可能擁有不同大小的屏幕(點坐標系不同)
發布一款App時,不能只針對一種規格的屏幕,應當在不同大小屏幕的設備都能夠運行
目的二:
iPhone支持三個方向的旋轉,iPad支持四個方向的旋轉
當屏幕旋轉時,點坐標系發生變化(屏幕的寬高發生變換),這時需要屏幕上的UI元素重新進行排列
App設置是否支持多個方向:
項目配置文件中:
控制器重寫supportedInterfaceOrientations方法,可以指定頁面支持的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
返回的是所支持方向的枚舉值
默認情況橫屏是不顯示狀態欄的,如果需要顯示,在Info.plist中設置:
在AppDelegate中添加代碼:
[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; [UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
通過frame進行屏幕適配
針對目的一:設置子視圖frame時,值都是根據父視圖的寬高計算得出
針對目的二:當屏幕發生翻轉時,重寫計算一邊子視圖的寬高
在控制器子類中,將子視圖frame的設置放在重寫的viewDidLayoutSubviews方法中:
- (void)viewDidLayoutSubviews //注意:該方法中應先調用重寫前的父類方法
在視圖子類中,將子視圖frame的設置放在重寫layoutSubviews方法中:
- (void)layoutSubviews //注意:該方法中應先調用重寫前的父類方法
這兩個方法都會在當前控制器的view或當前view的frame獲得初值以及發生變化時自動調用
如:控制器中的btn按鈕居中,且規定長寬為100
- (void) viewDidLayoutSubviews { [super viewDidLayoutSubiews]; CGFloat x, y, w, h; w = h = 100; x = self.view.frame.size.width/2 - w/2; y = self.view.frame.size.height/2 - h/2; self.btn.frame = CGRectMake(x, y, w, h); }
AutoResizing
用于確定一個視圖控件在整個屏幕的位置,當屏幕尺寸變化或者發生反轉時的效果
可以保證一個視圖控件的部分或者全部frame屬性的相對關系不發生改變,產生如居中、拉伸等效果。
如果選擇使用AutoLayout,就不能使用AutoResizing
代碼中使用:
UIView對象通過方法atuoResizingMask屬性設置可拉伸的屬性
@property(nonatomic) UIViewAutoresizing autoresizingMask enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargin = 1 << 3, UIViewAutoresizingFlexibleHeight = 1 << 4, UIViewAutoresizingFlexibleBottomMargin = 1 << 5 }; typedef NSUInteger UIViewAutoresizing;
這種樣子的枚舉,可以用 “|”運算,傳遞多個數值
如居中:
v.center = self.view.center; vw.bounds = CGRectMake(0, 0, 100, 100); [vw setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin];
如固定在左上角:
vw.frame = CGRectMake(20, 20, 100, 100); [vw setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin}UIViewAutoresizingFlexibleBottomMargin];
storyboard中使用:
需要先將AutoLayout關閉(iOS7之后)
選擇視圖后,點擊后邊的size屬性欄。
其中內部紅色表示屬性帶拉伸效果,外部的紅色表示距離屏幕邊界的值固定。
如將自身的寬高屬性的拉伸去掉,則尺寸固定。
到此,關于“如何通過frame適配以及AutoLayout”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。