XIB创建的cell中的已经适配过的控件如何动态改变高度?

在自定义cell时,无论是UITableView还是UICollectionView,我们都习惯于用XIB来自定义cell,并完成屏幕适配。

若是用代码来动态调整某个控件的frame倒是不难,但是用XIB我们自己弄好的约束却怎么办呢?有人可能会说,用代码来写,可是运行后并没有效果,这其实就是AutoLayout的作用。这时候又有人会说,你把AutoLayout的勾去掉,那么你做的适配不就消失了?

所以我在写程序的时候研究了一下这个问题,需要动态调整cell上一个控件的高度,并且它的高度一改变,其它控件的也会改变,因为它们的约束是相互依赖的。

所以说我们需要把约束拖线,IBOutlet,注意:在拖线之前,这里是height = XX,拖线之后,它就是你起的名字了。

图为cell上titleLabel这个控件的约束

注意:这个控件的约束是这样的:水平居中,左右边距与父控件保持10,下边距与父控件保持30,并保持高度不变。

这样的约束是没问题的,但是我需要改变它的高度。(如果需要改变宽度的话,我会去掉左右边距,而保持宽度不变)

能拖出来的约束是在左边显示的,如上图所示,在Constraints下面。约束拖出来之后是这样的:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *titleLabelHeight;

此时,我们需要修改的就是这个约束属性啦!

在哪里改这个属性比较合适呢?我推荐重写 cell 的 layoutSubviews 方法。注意:别忘了调用父类!切记!

- (void)layoutSubviews {
    [super layoutSubviews];
    self.titleLabelHeight.constant = [self.titleLabel.text sizeWithFont:[UIFont systemFontOfSize:18] maxSize:CGSizeMake(300, MAXFLOAT)].height;
}

这里我调用了我自己写的类目,具体可以参考我之前的博客《动态调整Label高度》这一篇。

需要注意的是,NSLayoutConstraint 这个类有一个属性 constant,我们需要修改的就是这个属性。它的类型是CGFloat,也就是我需要修改的高度。

至此,这个cell上的label的高度已经修改完毕。至于cell的高度,可以在 tableView/collectionView 的代理方法中写。(动态调整cell的Height/Size)

你可能感兴趣的:(开发小心得,日用而不知的常识,iOS开发实用小知识)