代码手写AutoLayout

1.最终效果

一个ViewController,紧挨着导航条有一个View ,右边显示电磁电量,左边显示一些文字吧,呃,如图:

这是横屏状态下的截图,至于竖屏和这个没什么两样。

2.电池电量的图片


3.开始coding

 a.首先创建一个View(先不管里面的lable和imageView)

代码如下:


id topGuide =self.topLayoutGuide;

UIView*someView = [UIView new];

[someView setBackgroundColor:[UIColor greenColor]]; 

[someView setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:someView];

NSMutableArray*someArrayOne = [NSMutableArrayarray];

[someArrayOne addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide][someView(==26)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(someView,topGuide)]];

[someArrayOne addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[someView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(someView)]];

[self.view addConstraints:someArrayOne];

PS:这里说明一点self.topLayoutGuide; 如果ViewController 存在导航条topLayoutGuide就是指的导航条,如果没有导航条就是self.view的顶部(有兴趣的可以将导航条除掉,看看上面的代码效果有什么不同),同时也有self.bottomLayoutGuide这个属性。还有系统会自动帮你适配textLable 和imageView大小,具体根据文字的多少、字体大小,和图片的size有关。


  b.开始布局textLabel 和imageView ,接着上面的代码写:


UILabel *lbl = [UILabel new];

[lbl setTranslatesAutoresizingMaskIntoConstraints:NO];

lbl.text=@"123456 G";

[someView addSubview:lbl];

UIImageView *imageView = [UIImageView new];

[imageView setTranslatesAutoresizingMaskIntoConstraints:NO];

[imageView setImage:[UIImage imageNamed:@"battery.png"]];

[someView addSubview:imageView];

NSMutableArray*someArrayTwo = [NSMutableArray array];

[someArrayTwo addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-16-[lbl]-(>=100)-[imageView]-16-|"options:NSLayoutFormatAlignAllCenterY metrics:nil views:NSDictionaryOfVariableBindings(lbl,imageView)]];

[someArrayTwo addObject:[NSLayoutConstraint constraintWithItem:lbl attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:someView attribute:NSLayoutAttributeCenterY multiplier:1constant:0]];

[someView addConstraints:someArrayTwo];

Ps:不知道有没有人对NSLayoutFormatAlignAllCenterY疑惑,其实这句代码就是指定lbl和imageView在垂直方向水平对齐。还有很多类似的变量,多写写就知道什么意思了,如果这个NSLayoutFormatAlignAllCenterY去掉,后面的电磁电量是显示不出来的。


c. 最后 ,给导航条制定个颜色,把someView的绿色背景去掉。

Over

你可能感兴趣的:(代码手写AutoLayout)