xib添加约束和添加(一)

重点!重点!重点! 复制控件时,只会保留对自身的约束,其它的如与其它控件或父控件的约束会被删除。

一、添加xib

(单个创建控制器的xib)

1.当控制器已经创建下单独创建xib(为控制器单独创建xib)

1、单独创建xib,名字要和控制器名字一样。
2、设置xib的控制器类为当前控制器。
3、给当前控制器view拖线为当前xib。
4、如下图:

 

(单个创建View的xib)

1、名字和创建的类一致。
2、view的class是创建的那个view类(这个控制器的区别,控制器是设置File's Owner的class有类型是(NSObject),而view是设置view的class引用类(类型是UIView))。
3、加载xib
   + (instancetype)loadXib{
    return [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil].lastObject
}
4、凡是用UIView创建的xib先设置xib的view的class是当前view

 二、设置约束

1、label

1、label添加约束可以只设置x,y就可以定位label。
2、在xib或storyBoard中换行的快捷键option+回车。
3、xib的使用,多行label的约束,不要约束高度,父视图约束下面labelbottom间距为0或一定间距就可,高度是label最高的高度。

2、UIImageView或其它控件都可以

  按住control 滑动鼠标拖线,为自身添加约束,保证无论放多大都不会变形

3、给两个相邻的控件快速设置约束(如左对齐、右对齐,垂直居中,水平居中,等宽、等高,注意必须是上下)

4、复制控件时,除本身之外的约束会被去掉。

 1).uiimageView 和按钮比较特殊,可以只设置其x,y就可以。

 2).可以设置其丝例,如1:1,或者当前图片的比例,这样保证不会变形,设置比例在自身上点击control拉个线,选择

 3).在右侧就可以根据需求改变比例。

5、设置几个相邻控件时,需要注意如下:

1、首先可以先固定一个控件如中心居中然后设置好y和height后。
2、设置第一个控件左边间距为0,右边间距为0(针对了中间那个控件)。
3、设置中间控件右边间距为0(针对于最右边的控件)。
4、设置最右边的控件右边间距为0.
5、最后设置所有的控件等宽、等高、顶部间距一致即可。
6、如下结果:

 

6、综合约束

最终结果:

1、刚开始进来的是登录,然后点击注册账号切换为注册,并且文字变成已有账号?(有一个动画,因为两个页面差不多)
2、首先先约束登录视图,添加一个登录的view视图设置左间距为0,居中,设置高度(先这样设置),再设置与父视图(self.view)等宽(为之后方便注册视图切换做准备,不能设置右边对齐注意)。
3、设置textField时需要注意,根据ui来看,应该是无边框的,后面是个图片,所以设置无边框,且设置左边,右边,宽度和高度与背影一致(然后再通过高度约束改为0.5,因为要放两个textField,注意可以把textField拖到下面或右边左边来设置顶部,左右,宽高一致)。
4、其它像按钮可以只设置左或右对齐,顶部的间距即可,最后一个控件设置bottom与父视图为0(这样就可以删除之前登录视图自定义的那个高度了)。
5、重点!重点!重点! 因为登录和注册视图几乎一致,选中登录视图,control+c,然后control+v,复制过来后,需要设置注册视图的约束(因为复制的控件只保留自身的约束,与其它控件或父控件的约束会被删除),设置它的左、顶部,宽高与登录视图一致。
6、然后把登录视图的右边设置为注册的左边(双击左边间距对齐的那个约束就可以设置),这样注册视图刚进来就看不见了。
7、把登录视图左边间距(注意是登录视图左边间距,不是登录视图右边间距与注册视图左边间距为0的那个约束)拖线设置为属性,通过点击注册帐号来设置约束的值 。
8、点击注册帐号实现设置约束的值和动画(也就是立即更新约束)
   if (self.leftConstraint.constant) {//不为0是注册视图
        self.leftConstraint.constant = 0;
        [sender setTitle:@"注册账号" forState:UIControlStateNormal];
    }else{//这个约束等于0,是登录视图
        self.leftConstraint.constant = -self.view.sth_width;
        [sender setTitle:@"已有账号?" forState:UIControlStateNormal];
    }
    [UIView animateWithDuration:0.25 animations:^{
        [self.view layoutIfNeeded]; //强制更新约束,也是立即更新约束
    }];
posted @ 2017-03-08 20:08  TheYouth  阅读(6375)  评论(1编辑  收藏  举报