自动布局下的自定义行高约束问题

昨天晚上被自动布局里自定义行高磨了一晚上,简直快要疯掉。我是利用Masonry来进行自动布局的,布局很简单,就是cell里面放两个label,可是,在我添加完约束之后,控制台就会打印一大堆东西,约束是这样的:

_titleLab.font = [UIFont systemFontOfSize:28*TTScreenWith/640];

[_titleLab mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerY.mas_equalTo(self.contentView.mas_centerY);

make.left.equalTo(self.contentView.mas_left).with.offset(15);

make.top.equalTo(self.contentView.mas_top).with.offset(15);

make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-15);

make.right.equalTo(self.infoLab.mas_left).with.offset(-15);

}];

_infoLab.numberOfLines = 0;

_infoLab.lineBreakMode = NSLineBreakByCharWrapping;

_infoLab.font          = [UIFont systemFontOfSize:24*TTScreenWith/640];

[_infoLab mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerY.mas_equalTo(self.contentView.mas_centerY);

make.left.equalTo(self.titleLab.mas_right).with.offset(15);

make.top.equalTo(self.contentView.mas_top).with.offset(15);

make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-15);

make.right.equalTo(self.contentView.mas_right).with.offset(-15);

}];

如上约束,在不动态增加高度的情况下是完全没有问题的,而我使用了动态增加行高的方法之后问题就来了。想来想去,回头看看我加的约束,中心为cell的中心,距离上边距15,下边距15,但此时tableview的代理方法里面heightForRow写着

[cell setNeedsUpdateConstraints];

[cell updateConstraintsIfNeeded];

cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));

[cell setNeedsLayout];

[cell layoutIfNeeded];

CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1;

return height;

此时先执行cell里面的约束,在没有对cell进行赋值的情况下height是为1的,好吧,此时它们俩冲突了,最后想来想去,解决办法就是给tableview一个预估的高度,这样保证了约束不与行高冲突.我给的预估高度是

[UIScreen mainScreen].bounds.size.width*60/320

成功~~~~~

时间: 2024-08-28 18:21:12

自动布局下的自定义行高约束问题的相关文章

几种基本样式,背景图,字体,下划线,行高垂直等

<div style=:width:600px; heiget:600px; background-color:...; background-image; background-repea:...; background-position; 宽度               高度                背景颜色                     背景图片                   背景图平铺                 背景图位置 background-attach

[转]对tableView三种计算动态行高方法的分析

tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,还是有一些玄机的.笔者本次主要是因为预估行高的方法的问题作为了一个契机顺带写了此文对几种动态行高方法的分析. 旧方法 现在常规的动态行高的计算方法还是用 [str boundingRectWithSize:size options:NSStringDrawingU

ios开发日记11 对tableView三种计算动态行高方法的分析

tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,还是有一些玄机的. AD: tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,

对tableView三种计算动态行高方法的分析

tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableView中的自定义cell的动态行高,还是有一些玄机的.笔者本次主要是因为预估行高的方法的问题作为了一个契机顺带写了此文对几种动态行高方法的分析. 如果你不是在董铂然博客园看到本文,请点击查看原文. 旧方法 现在常规的动态行高的计算方法还是用 [str boundingRectWithSize:siz

IE6行高(line-height)失效

<a class="bug" href=""><span></span>i am bug</a> .bug{height:60px;line-height:60px;background-color:#999;} .bug span{display:inline-block;width:100px;height:20px;background-color:#ff0000;vertical-align:middle;}

在固定宽度 下计算出实际的行高

//根据字符串内容的多少  在固定宽度 下计算出实际的行高 - (CGFloat)HelperTextHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size { if ([self heperGetCurrentIOS] >= 7.0) { //iOS7之后 /* 第一个参数: 预设空间 宽度固定  高度预设 一个最大值 第二个参数: 行间距 如果超出范围是否截断 第三个参数: 属

(VB.net)自定义TableLayoutPanel使它能够在运行时用鼠标改变行高和列宽。

喜欢看C#的童鞋,这里有个工具,你们可以自己转换:http://converter.telerik.com/ 想达到这个效果,首先新建一个新的项目.在项目名字上面右击,新增一个类,类名为:TableLayoutPanelEx.vb. 然后只要复制下面的代码到类中即可. Public Class TableLayoutPanelEx Inherits TableLayoutPanel Private Const WM_NCHITTEST As Integer = &H84 Private Cons

Fontface Ninja 一鍵查看網頁使用的字型名稱、大小和行高,快速下載字體檔案

對於網頁設計有興趣的朋友,一定很習慣在上網時注意網頁所使用的字型,若是比較有經驗的使用者會透過找網頁原始碼的方式來查看網頁使用的字型,或是從 CSS 檔裡去挖掘該網站使用的是那一種字型組合.先前我曾介紹過 WhatFont Tool,可以快速顯示網頁使用的字型.大小和行高,是個相當方便的工具,本文要再介紹另一個更強大的工具,它不但能夠幫你快速查詢到字型等資訊,還可以直接在網頁上測試文字實際套用該字體所顯示的樣式,以及一鍵將字型檔案下載到電腦裡. Fontface Ninja 是一個相當好用的瀏覽

iOS开发tips-UITableView、UICollectionView行高/尺寸自适应

UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比较简单,首先必须设置estimatedRowHeight给出预估高度,设置rowHeight为UITableViewAutomaticDimension(注意:如果不修改rowHeight默认就是UITableViewAutomaticDimension),对于这两个参数除了直接修改tableview对应的属性之外仍然支持使用对应的代理方法设置.最后只要在UITableViewCell中设置conten