MMLayout
今天想介紹的就是開發(fā)中,布局的問題. 本人一直使用的傳統(tǒng)的Frame
來寫UI
個人習慣,我覺得Frame 的效率還是比autolayout
要高的,這個小伙伴可以測試一下的.
但是使用Frame 的時候 代碼計算的時候很多,比如距離左邊的控件的最大x值是多少,這樣寫來寫去,實在代碼可以不方便看,然后還的自己計算,很麻煩.
下面是簡單的調(diào)用 下面的使用時在UIViewController 里面添加UI使用
-(void)viewDidLayoutSubviews{
[self.yellowView make_Layout:^(MMLayout *layout) {
layout.width = 100;
layout.height = 200;
layout.left = 5;
layout.top = 100;
}];
__weak typeof(self)_self = self;
[self.yellowViewTwo make_Layout:^(MMLayout *layout) {
__strong typeof(_self)self = _self;
layout.left = self.yellowView.maxX + 5;
layout.top = self.yellowView.y;
layout.size = self.yellowView.bounds.size;
}];
[self.yellowViewTree make_Layout:^(MMLayout *layout) {
layout.height = 50;
layout.width = 100;
layout.right = 10;
layout.top = 10;
}];
}
鏈接式寫Frame
1.創(chuàng)建一個View
UIView *newView = [UIView new];
[self.view addSubViews:newView];
newView.height(100).left(10).width(100).top(100);
相同設置
UIView *redView = [UIView new];
[self.view addSubview:redView];
UIView *redView1 = [UIView new];
[self.view addSubview:redView1];
UIView *redView2 = [UIView new];
[self.view addSubview:redView2];
UIView *redView3 = [UIView new];
[self.view addSubview:redView3];
redView.m_left(10).m_top(10).m_size(CGSize(50,50));
redView1.m_equalToTop(redView).m_equalToSize(redView).m_left(redView.mm_maxX + 10);
redView2.m_equalToTop(redView1).m_equalToSize(redView1).m_left(redView1.mm_maxX + 10);
redView3.m_equalToTop(redView2).m_equalToSize(redView2).m_left(redView2.mm_maxX + 10);
以上是兩種方式代碼閱讀我個人覺得很好閱讀
平時在控制器寫UI代碼的時候布局的代碼 我一般都會寫在 - (void)viewDidLayoutSubviews
這個方法當控制器的View發(fā)生變化的時候會來到這個方法,比如一個場景,就是橫豎屏的時候,你不用監(jiān)聽屏幕的旋轉,只要在這里寫上相對好的布局,橫豎屏的時候會自己調(diào)用這個方法,從新的計算子控件的位置.
假設你在自定義View的時候在View的里面寫布局的方法是 layoutSubviews
這個方法 父控件發(fā)生變化會調(diào)用LayoutSubViews
個人覺得,如果你用代碼寫aotolayout的話,有的時候更新約束,也是很麻煩的一件事.然后調(diào)試的時候,也會出現(xiàn)各種aotolayout的錯誤提示.
使用frame來寫,避免了aotolayout的錯誤,錯誤率降低了.
話又說回來,autoLaout 確實很強大. 比如寫UILabel
的時候很方便,用frame寫的話,還得計算text的size. 不過開發(fā)中,使用某一個東西,當然是有利有弊.這個還的根據(jù)大家的喜好,和公司的規(guī)范.來開發(fā).
謝謝大家.