uitableviewcell textlabel detailtextLabel 换行的位置及尺寸问题

我们在使用uitableView的时候,一些简单的cell样式其实是不需要自定义的,但是系统的方法又似乎又无法满足需要,这时候我们就需要在系统上做一些改变来达到我们的需求;

像这种cell,简单分析下,一个textlabel,一个detailTextlabel,一个accview就可以实现。我们需要做的就是一些细节的处理;先上代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:NSStringFromClass([UITableViewCell class])];
    }

    cell.textLabel.textColor = TextblackColor;
    cell.textLabel.font = [UIFont systemFontOfSize:[QDFontHelp Font:14]];
    if (indexPath.row == 0) {
        textString =  @"现金分红(默认)";
        detailTextString = @"分红所得资金实时发放到钱包";
    }else{
        textString =  @"红利再投资";
        detailTextString = @"分红所得资金直接用于购买该基金,将分红转为持有基金份额";
    }

    cell.textLabel.text = textString;
    cell.detailTextLabel.text = detailTextString;
    cell.detailTextLabel.numberOfLines = 0;
    cell.detailTextLabel.font = [UIFont systemFontOfSize:[QDFontHelp Font:12]];
    [cell.textLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(cell.mas_left).offset(WidthScale(15));
        make.top.equalTo(cell.mas_top).offset(HeightScale(5));
    }];
    [cell.detailTextLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(cell.mas_left).offset(WidthScale(15));
        make.right.equalTo(cell.mas_right).offset(-WidthScale(100));
        make.top.equalTo(cell.textLabel.mas_bottom);
    }];
    cell.detailTextLabel.textColor = TextGrayColor;
    if (indexPath.row == self.fenghongType) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }else{
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    cell.tintColor = APPThemeColor;
    return cell;
}

  在这里,我们对系统的textlabel和detailtextlabel进行了重新布局,已避免系统根据我们给出的cell高度进行自动适应;

关于checkmark的颜色,我们可以通过cel的tintcolor来改变!

写到这里,那么我们如何动态返回cell的高度呢,这里我们根据label的内容来返回,代码如下

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

      CGSize size1 = [textString boundingRectWithSize:CGSizeMake(kScreen_width - WidthScale(115), 1000) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:[QDFontHelp Font:14]]} context:nil].size;
      CGSize size2 = [detailTextString boundingRectWithSize:CGSizeMake(kScreen_width - WidthScale(115), 1000) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:[QDFontHelp Font:12]]} context:nil].size;
      return size1.height + size2.height  + HeightScale(15);

}

  在ios7以后我们不再使用sizetofit来动态返回内容的高度  而使用boundingrect!当然这里还是有一点坑的,在具体使用的时候慢慢摸索吧!

时间: 2024-08-06 11:27:10

uitableviewcell textlabel detailtextLabel 换行的位置及尺寸问题的相关文章

JavaScript获取DOM元素位置和尺寸大小

在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识. 基础概念 为了方便理解,我们需要了解几个基础概念,每个HTML元素都有下列属性 offsetWidth clientWidth scrollWidth offsetHeight clientHeight scrollHeight offsetLeft clientL

IOS Ui控件 修改位置和尺寸,代码添加控件

所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中, UIView的常见属性 UIView *superview; 获得自己的父控件对象 NSArray *subviews; 获得自己的所有子控件对象 NSInteger tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 CGAffineTransform transform; 控件的形变属性(可以设置旋转角度.比例缩放.平移等属性) CGRect frame; 控件所在矩形框在父控件中的位置和尺

理解JavaScript和jQuery中的位置与尺寸

Part 1 JavaScript中的位置和尺寸 一.元素的位置 1. offsetLeft:offsetTop(只读) 相对于offsetParent边框左上角的坐标. 什么是offsetParent? 某元素的offsetParent就是离该元素最近的定位父元素,如果没有定位父元素,那么offsetParent就是body. 2.scrollLeft:scrollTop(可设置) 由于滚动而被遮挡的内容区域左上方部分的宽高. 仅仅对页面和设置了overflow的元素有效,(因为只有它们的内容

获取DOM元素位置和尺寸大小

JavaScript获取DOM元素位置和尺寸大小 在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识. 基础概念 为了方便理解,我们需要了解几个基础概念,每个HTML元素都有下列属性 offsetWidth clientWidth scrollWidth offsetHeight clientHeight scroll

关于浏览器、屏幕、滚动条的位置与尺寸问题

今天的工作中遇到了相关问题,恶补了一下,觉得以后需要回顾,整理了一下. 一.好用的方法 先说说jQuery中几种比较好用的方法 1.offset() 获取或者设置相对于当前视口的相对偏移.可以返回对应的top值和left值. 例如:obj.offset().top 可以获取dom对象相对于当前视口的top值. $(“.demo”).offset({ top: 10, left: 30 }); 设置class为demo的相对于视口的top值和left值. 2.scrollTop()/scrollL

JavaScript获取DOM元素位置和尺寸

每一个HTML元素都有下列属性: offsetWidth clientWidth scrollWidth offsetHeight clientHeight scrollHeight offsetLeft clientLeft scrollLeft offsetTop clientTop scrollTop 首先,要理解HTML元素的实际内容可能会比分配给这个元素容纳内容的盒子要大,比如说一段很长的文字,把它放在了一个固定长宽的盒子里面,因此可能会出现滚动条. 1.clientHeight和cl

js学习笔记17----元素的各种位置,尺寸

1. offsetLeft[Top] 当前元素到定位父级(即offsetParent)的距离(偏移值 ). 父级没有定位: offsetParent -> body offsetLeft[Top] -> html 父级有定位: ie 7: 如果自己没有定位,那么offsetLeft[Top]是到body的距离. 如果自己有定位,那么就是到定位父级的距离. 其他: 到定位父级的距离. 2.元素宽高 元素.style.width : 样式宽,带单位: 元素.clientWidth : 可视区宽(样

selenium总结:通过location 和 size 获取元素所在像素位置和尺寸,截取图片ROI

1. 2. #https://captcha.luosimao.com/demo/ chrome default: location 不滚动,直接返回相对整个html的坐标 {'x': 15.0, 'y': 129.0} location_once_scrolled_into_view 返回相对可视区域的坐标(改变浏览器高度,可以观察到底部元素底部对齐后y的变化) 顶部/底部元素 完全可见不滚动,{u'x': 15, u'y': 60} 顶部元素部分可见或完全不可见都会滚动到 顶部对齐 {u'x

iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)

一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-=  +=,每次滚动的时候,会频繁调用xib中的setFrame方法,导致了最后xib消失或者越来越大.下图是,headerView高度被挡了,怎么设置也不管用.包装后完美解决. 解决办法: 第二处 - tableView中的header文本调整左间距,如图: