關於iOS自動佈局
這裡做一個通過程式碼實現自動佈局的Demo,通過IB來做的就不講了,網上相關的資料很多,這裡給出一個寫的不錯的連結,有興趣的同學自己看吧.
要談自動佈局,那基本的檢視是第一步,做了一個這樣的ViewController
- <span style="font-size:18px;">//
- // NESMainViewController.m
- // AutoLayout
- //
- // Created by Nestor on 14-3-2.
- // Copyright (c) 2014年 NesTalk. All rights reserved.
- //
-
#import "NESMainViewController.h"
- @interface NESMainViewController ()
- @property (nonatomic,retain) UIView *view1;
- @property (nonatomic,retain) UIView *view2;
- @property (nonatomic,retain) UIView *view3;
- @end
- @implementation NESMainViewController
- -(UIView *)view1
- {
- if (!_view1) {
-
_view1 = [[UIView alloc
- _view1.backgroundColor = [UIColor greenColor];
- }
- return _view1;
- }
- -(UIView *)view2
- {
- if (!_view2) {
- _view2 = [[UIView alloc] initWithFrame:CGRectMake(165, 30, 145, 200)];
-
_view2.backgroundColor = [UIColor
- }
- return _view2;
- }
- -(UIView *)view3
- {
- if (!_view3) {
- _view3 = [[UIView alloc] initWithFrame:CGRectMake(10, 240, 300, 300)];
- _view3.backgroundColor = [UIColor blueColor];
- }
- return _view3;
- }
- -(void)buildLayout
- {
- [self.view addSubview:self.view1];
- [self.view addSubview:self.view2];
- [self.view addSubview:self.view3];
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- [self buildLayout];
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
- </span>
先看這段程式碼
- <span style="font-size:18px;">-(UIView *)view1
- {
- if (!_view1) {
- _view1 = [[UIView alloc] initWithFrame:CGRectMake(10, 30, 145, 200)];
- _view1.backgroundColor = [UIColor greenColor];
- }
- return _view1;
- }</span>
這段程式碼的寫法經常能夠看到,單例裡面有他,TableView的代理方法能用到他,這裡屬於重寫@property的getter方法,簡單來說,通過點語法來呼叫私有成員變數:self.view1來呼叫該方法,有兩大好處
1.分離了不同方法的構造內容,程式碼層次更加明顯.
2.延遲載入,什麼時候需要什麼時候建立,而不是統一在ViewDidLoad方法中進行建立,對於複雜的檢視控制器來說可以優化執行效率.
再看ViewDidLoad方法裡
- <span style="font-size:18px;">- (void)viewDidLoad
- {
- [super viewDidLoad];
- [self buildLayout];
- }</span>
非常簡單,呼叫了一個buildLayout方法,看方法名就能夠知道,這裡是專門用來初始化檢視佈局的方法,由於在oc中init開頭的方法被看做類的初始化方法,故此使用了build,當然這屬於個人習慣,無所謂的事~
buildLayout方法則逐個將要新增的控制元件放到了view上
- <span style="font-size:18px;">-(void)buildLayout
- {
- [self.view addSubview:self.view1];
- [self.view addSubview:self.view2];
- [self.view addSubview:self.view3];
- }</span>
這裡就能夠明顯的看到通過重寫getter方法來初始化檢視的好處了,都添加了哪些控制元件一目瞭然,如果需要修改某一個控制元件,那直接定位到對應的getter方法修改即可,而無需在大量的程式碼中搜索那麼幾行程式碼.
根據這樣的程式碼佈局進行編寫,對於單一檢視控制器來說,就可以有了這樣的分層效果:
閒話到這,繼續主題.
程式碼到這裡螢幕上的檢視應該如下圖所示
是我們需要的佈局效果,但是如果螢幕橫過來,問題就出現了
接下來就需要對程式碼進行一定的調整來完成自動佈局.
從iOS6開始...應該是這時候開始吧,想不起來了,加入了NSLayoutConstraint,這個就是做自動佈局需要用到的東西
在使用NSLayoutConstraint的時候需要用到一種Visual Format Language,不是特別難的東西,本文的Demo裡會簡單介紹,更深層的東西有興趣自己搜尋一下吧.
首先需要在