zoukankan      html  css  js  c++  java
  • 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]; //强制更新约束,也是立即更新约束
        }];
    将来的自己,会感谢现在不放弃的自己!
  • 相关阅读:
    求幂运算、多项式乘法及Horner法则的应用
    JAVA泛型中的类型擦除及为什么不支持泛型数组
    关于递归的理解及递归表达式复杂度分析(以求解最大公约数为例)
    随机序列生成算法---生成前N个整数的一组随机序列
    Windows 与 Linux下关于端口不能访问的问题
    Netty 实现HTTP文件服务器
    字符数组转换成数字
    字符串反转的进一步应用----单词反转
    递归算法编程整数因子分解问题的递归算法
    数据返回[数据库基础]——图解JOIN
  • 原文地址:https://www.cnblogs.com/TheYouth/p/6522806.html
Copyright © 2011-2022 走看看