给UIScrollView+代码约束

uiscrollview的约束和普通view的约束不太一样,相信用过的朋友都遇到过这种问题,因为如果用约束的话 scrollview的contentsize是不需要设置的,它会根据scrollview里面的内容确定它的contentsize的大小
工具/原料
xcode6.4
ox 10.10.5
方法/步骤
1:用xcode创建一个新工程,然后打开viewcontroller.m文件

2:我们在viewcontroller的viewdidload方法里创建一个uiscrollview并且加上约束
代码如下:
//创建scrollview
uiscrollview * scrollview=[[uiscrollview alloc] init];
scrollview.translatesautoresizingmaskintoconstraints=no;
scrollview.backgroundcolor=[uicolor lightgraycolor];
[self.view addsubview:scrollview];
//给它加上约束 使它距屏幕的上左下右都是20像素
[self.view addconstraints:[nslayoutconstraint constraintswithvisualformat:@"h:|-20-[scrollview]-20-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(scrollview)]];
[self.view addconstraints:[nslayoutconstraint constraintswithvisualformat:@"v:|-20-[scrollview]-20-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(scrollview)]];
效果如图

3:我要再创建两个view 这两个view的大小和scrollview的大小一样大,使scrollview能横向滚动
代码如下:
//添加约束 (非常重要)
//1.水平方向排开 宽度相等 上下边缘对齐(等高)
[scrollview addconstraints:[nslayoutconstraint constraintswithvisualformat:@"h:|-0-[redview]-0-[blueview(==redview)]-0-|" options:nslayoutformatalignalltop | nslayoutformatalignallbottom metrics:nil views:nsdictionaryofvariablebindings(redview,blueview)]];
//2.垂直方向一直撑到父视图的
[scrollview addconstraints:[nslayoutconstraint constraintswithvisualformat:@"v:|-0-[redview]-0-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(redview)]];
//到了这里 还没完 如果是普通的view 那就搞定了 但是scrollview不一样还得添加下面两个约束
//3.redview的宽高 和scrollview的宽高相等的约束
[scrollview addconstraint:[nslayoutconstraint constraintwithitem:redview attribute:nslayoutattributewidth relatedby:nslayoutrelationequal toitem:scrollview attribute:nslayoutattributewidth multiplier:1.0 constant:0]];
[scrollview addconstraint:[nslayoutconstraint constraintwithitem:redview attribute:nslayoutattributeheight relatedby:nslayoutrelationequal toitem:scrollview attribute:nslayoutattributeheight multiplier:1.0 constant:0]];



4:整个viewdidload全部代码如下:
- (void)viewdidload
{
[super viewdidload];
//创建scrollview
uiscrollview * scrollview=[[uiscrollview alloc] init];
scrollview.translatesautoresizingmaskintoconstraints=no;
scrollview.backgroundcolor=[uicolor lightgraycolor];
[self.view addsubview:scrollview];
//给它加上约束 使它距屏幕的上左下右都是20像素
[self.view addconstraints:[nslayoutconstraint constraintswithvisualformat:@"h:|-20-[scrollview]-20-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(scrollview)]];
[self.view addconstraints:[nslayoutconstraint constraintswithvisualformat:@"v:|-20-[scrollview]-20-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(scrollview)]];
//创建redview
uiview * redview=[[uiview alloc] init];
redview.backgroundcolor=[uicolor redcolor];
redview.translatesautoresizingmaskintoconstraints=no;
[scrollview addsubview:redview];
//创建blueview
uiview * blueview=[[uiview alloc] init];
blueview.backgroundcolor=[uicolor bluecolor];
blueview.translatesautoresizingmaskintoconstraints=no;
[scrollview addsubview:blueview];
//添加约束 (非常重要)
//1.水平方向排开 宽度相等 上下边缘对齐(等高)
[scrollview addconstraints:[nslayoutconstraint constraintswithvisualformat:@"h:|-0-[redview]-0-[blueview(==redview)]-0-|" options:nslayoutformatalignalltop | nslayoutformatalignallbottom metrics:nil views:nsdictionaryofvariablebindings(redview,blueview)]];
//2.垂直方向一直撑到父视图的
[scrollview addconstraints:[nslayoutconstraint constraintswithvisualformat:@"v:|-0-[redview]-0-|" options:0 metrics:nil views:nsdictionaryofvariablebindings(redview)]];
//3.redview的宽高 和scrollview的宽高相等的约束
[scrollview addconstraint:[nslayoutconstraint constraintwithitem:redview attribute:nslayoutattributewidth relatedby:nslayoutrelationequal toitem:scrollview attribute:nslayoutattributewidth multiplier:1.0 constant:0]];
[scrollview addconstraint:[nslayoutconstraint constraintwithitem:redview attribute:nslayoutattributeheight relatedby:nslayoutrelationequal toitem:scrollview attribute:nslayoutattributeheight multiplier:1.0 constant:0]];
}
注意事项
view.translatesautoresizingmaskintoconstraints=no
希望本文给UIScrollView+代码约束能帮到你。