AutoLayout UI
如果下面的内容看不了,请移至:http://blog.csdn.net/xjh093/article/details/53501919
举个粟子:
在控制器的view上面添加一个view。
UIView
.jhView()
.jh_addToView(self.view)
.jh_frame(@"[x:10,y:80,w:2_w(0)-15,h:110]")
.jh_bgColor(({
UIColor *color = [UIColor lightGrayColor];
color;
})).jh_tag(@(100));
其中,jh_bgColor也可以传字符串:
jh_bgColor(@"0xeeeeee");
或者直接是:
jh_bgColor([UIColor brownColor])
当然,这个不是讨论的重点。重点是:jh_frame
传参可以是:
NSValue类型:[NSValue valueWithCGRect:CGRectMake(10,20,30,40)];
字符串类型:
- @“{{10,20},{30,40}}”;
- @"[x:20,y:120,w:150,h:30]"
重点讲字符串中的第2种类型:
标准格式是:@"[x:value,y:value,w:value,h:value]"
value就是重点讲解对象!
相当于是绝对布局了,比如这种:@"[x:20,y:120,w:150,h:30]"
这就是相对布局了。
W:屏幕的宽度。
H:屏幕的高度。
比如:@"[x:0,y:0,w:W,h:H]"
就是一个铺满整个屏幕的View。
W加上,减去,乘以,除以一个值。
比如:@"[x:0,y:0,w:W*0.5,h:H]"
就是一个铺满左半边屏幕的View。
H,同理。
prefix可以是:x,y,w,h,midx,midy,maxx,maxy。
value是:view的父类view的tag值,或者是父类view里面子view的tag值。
比如:
x(110) 表示取当前窗口中tag值为100的view的x值,即x(100) == view.frame.origin.x
y(110) 表示取当前窗口中tag值为100的view的y值,即y(100) == view.frame.origin.y
w(110) 表示取当前窗口中tag值为100的view的width值,即w(100) == view.frame.size.width
h(110) 表示取当前窗口中tag值为100的view的height值,即h(100) == view.frame.size.height
midx(110) 表示取当前窗口中tag值为100的view的x+width0.5值,即midx(100) == CGRectGetMidX(view.frame)
midy(110) 表示取当前窗口中tag值为100的view的y+height0.5值,即midy(100) == CGRectGetMidY(view.frame)
maxx(110) 表示取当前窗口中tag值为100的view的x+width值,即maxx(100) == CGRectGetMaxX(view.frame)
maxy(110) 表示取当前窗口中tag值为100的view的y+height值,即maxy(100) == CGRectGetMaxY(view.frame)
比如:
w(110)+10,就是:view.frame.size.width + 10
w(110)-10,就是:view.frame.size.width - 10
w(110)*10,就是:view.frame.size.width * 10
w(110)/10,就是:view.frame.size.width / 10
[self.view jhAutoLayout];
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.view jhUpdateLayout];
}
为什么要放在viewDidApper里面?
有可能从其他界面返回后,还是之前没有更新的布局。
比如:
VC1竖屏旋转成横屏后进入VC2,VC2横屏旋转成竖屏后再返回,就需要更新。
因为注册了通知,所以控制器移除的时候,要移除通知
- (void)dealloc{
[self.view jhEndLayout];
}