iOS 代码修改Xib约束

作者: Zhui_Do | 来源:发表于2017-04-17 17:14 被阅读461次

一、修改控件距上、下、左、右的距离,以距右为例:

1.创建一个Xib的Cell,拖一个按钮到Cell上为按钮添加属性


添加约束.png

2.找到距右的属性


找到距离右边的约束.png
3.拖线到.h文件当中
拖线到h文件当中.png

4.为按钮添加一个点击事件并且在事件当中改变约束的值


改变约束的值.png

如果想要渐变的动画效果,把注释部分打开即可(Xib使用UIView动画的方法)先在外面写好目标值,在block内部调用layoutIfNeeded即可。

二、改变控件宽度的固定值

同上也是拖线到头文件当中,然后改变NSLayoutConstraint的constant值来改变宽度的大小


宽度常量改变.png

三、修改宽度(或高度)比例约束

1.先为按钮添加一个高度30


高度.png

2.设置按钮水平垂直居中


水平垂直居中.png
3.设置按钮宽度为父视图宽度的0.3倍
向父视图拖线.png ![ ![找到宽度比例约束拖线.png](https://img.haomeiwen.com/i5333893/063a380c6a7ca4d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)](https://img.haomeiwen.com/i5333893/792fe02fd5c09c58.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

以上是设置比例的方法,如果想要修改这个宽度,

在代码中将0.3修改为其他比例,例如(0.6):

比例属性.png

可以看到比例属性中有multiplier值为0.3,那是不是修改一下这个值就可以呢,答案是否的。


不允许修改.png

不允许直接修改比例的值。
因为就需求要更改比例值,所以查阅资料后发现大部分都是移除掉这个比例约束,代码重新添加一个新的约束。

移除添加约束.png

    [self.contentView removeConstraint:self.widthMultiplierConstraint];//在父试图上将button的宽度约束删除
    [self.contentView removeConstraint:self.ConstraintNew];
    
    NSLayoutConstraint *myConstraint =[NSLayoutConstraint
                                       constraintWithItem:self.changeButton //子试图
                                       attribute:NSLayoutAttributeWidth //子试图的约束属性
                                       relatedBy:NSLayoutRelationEqual //属性间的关系
                                       toItem:self.contentView//相对于父试图
                                       attribute:NSLayoutAttributeWidth//父试图的约束属性
                                       multiplier:0.6
                                       constant:0.0];// 固定距离
    self.ConstraintNew = myConstraint;
    [self.contentView addConstraint: myConstraint];//为button重新添加一个约束

注意:

1.这里将新添加的约束纪录下来,是为下次约束改变时移除使用。
2.如果拖线的代码属性被删除,但是xib上的关联没删掉会导致崩溃。


Demo效果图.png

点击可改变约束

求教:

本来想做个刷新功能但是发现xib重用这里还有点问题,所以在这里求教一下,有大神的话可以帮忙解答一下。
1.当有100个cell时,更改了某一个cell上的按钮的宽度,由于重用机制其他的重用cell也会相应变化。所以猜测如果使用xib的cell就要确保每一个cell都要为宽度(其他同理例如lable的text)赋一个新值。这样才不会被重用影响。
2.因为想做一个右上角的刷新功能,以上三个cell的宽度和距右约束都被改变后,通过点击刷新按钮,如何让当前的cell复原。

重新注册.png
这里猜测tableview是否有反注册机制,是不是重新注册一下cell会不会重新加载一下xib但是事实证明并不可以,所以并不能复原更改过的约束。
所以这里想到的解决办法也是要保证每个cell都要有一个值,用来存储当前的宽度值,一刷新就都赋值为0.
如果有更好的方法请告知。
DEMO:https://github.com/Z-hui/ChangeXibConstraint

相关文章

  • iOS 代码修改Xib约束

    一、修改控件距上、下、左、右的距离,以距右为例: 1.创建一个Xib的Cell,拖一个按钮到Cell上为按钮添加属...

  • 使用 xib 设置约束

    0.使用代码设置约束和使用 xib 设置约束,两种方式各有好处吧.代码约束便于维护和修改, xib 约束则可快速搭...

  • iOS 用XIB约束后,用代码修改约束

    当使用xib,并使用了AutoLayout之后,当需要适配机型时,或者手动更改视图的frame的时候,就需要修改约...

  • iOS动态修改xib约束

    小编喜欢用xib布局UI,因此为了适配不同屏幕 就需要将IB上的约束拖入到类中,程序启动后修改NSLayoutCo...

  • iOS代码修改xib创建的cell的约束

    最近有个需求是这样的: cell上有标题和一个按钮,当不需要按钮显示的时候,标题label要和cell等宽,这个界...

  • iOS 纯代码修改xib中的约束值

    使用xib文件进行创建的UI,内容如下 现在有一个需求,A分情况显示/隐藏,那么当A显示的时候,B的位置是没有问题...

  • iOS 13踩坑: view frame改变无效

    问题:xib约束view的高度,拖到代码中,然后直接改变view.frame.size.height,在iOS13...

  • 代码修改XIB约束比例multiplier属性

    multiplier属性是只读的,不可以进行直接修改。stackoverflow给出答案,特意分享出来,给有需要的...

  • 代码修改Xib中的约束关系

    1 边距的修改可以通过拖拽的方式在代码中添加与xib约束对应的属性, 然后通过该属性的constant 属性修改偏...

  • ios Xib的几种用法[转]

    大多数Ios开发者都喜欢运用xib以及约束来布局,这样省去了大量初始化代码,但是xib的使用也是存在不少差异的: ...

网友评论

    本文标题:iOS 代码修改Xib约束

    本文链接:https://www.haomeiwen.com/subject/gvltzttx.html