标签文本增加时如何以编程方式增加集合视图单元格高度?

     2023-02-23     56

关键词:

【中文标题】标签文本增加时如何以编程方式增加集合视图单元格高度?【英文标题】:How to programmatically increase collection view cell height when label text increases? 【发布时间】:2018-08-13 10:14:41 【问题描述】:

如何增加 UICollectionViewCell 的高度?我在我的项目中实现了 2 个功能:

- (NSArray *)cellSizes 

/** Here we mentioned the code for size of collection view cells  **/
_cellSizes = [NSMutableArray array];

if ([homePageArray count] != 0 )

    _cellSizes = [NSMutableArray array];
    [_cellSizes removeAllObjects];

    for (NSInteger i = 0; i < [homePageArray count]; i++)
    
        CGSize size;
        UIImageView *sampleImage = [[[UIImageView alloc]init]autorelease];
        [sampleImage setFrame:CGRectMake(0,0,(delegate.windowWidth-30),150)];
        CGSize size1 = [self aspectScaledImageSizeForImageView:sampleImage width:150 height:150];
        //        [productTitleLbl setFont:[UIFont fontWithName:appFontRegular size:14]]; //78 //60
        CGFloat heightOfStr = [self heightForString:[[homePageArray objectAtIndex:i]objectForKey:@"item_title"] font:[UIFont fontWithName:appFontRegular size:14] maxWidth:(delegate.windowWidth-35)];

        size=CGSizeMake(size1.width, size1.height+((heightOfStr>30)?heightOfStr+55:85));
        _cellSizes[i] =[NSValue valueWithCGSize:size];
    

return _cellSizes;

对于我使用的图像

- (CGSize) aspectScaledImageSizeForImageView:(UIImageView *)iv width:(float)wid height:(float)hgth


float x,y;
float a,b;
x = iv.frame.size.width;
y = iv.frame.size.height;
a = wid;
b = hgth;

if ( x == a && y == b )            // image fits exactly, no scaling required
    // return iv.frame.size;

else if ( x > a && y > b )          // image fits completely within the imageview frame
    if ( x-a > y-b )               // image height is limiting factor, scale by height
        a = y/b * a;
        b = y;
     else 
        b = x/a * b;                // image width is limiting factor, scale by width
        a = x;
    

else if ( x < a && y < b )         // image is wider and taller than image view
    if ( a - x > b - y )           // height is limiting factor, scale by height
        a = y/b * a;
        b = y;
     else                         // width is limiting factor, scale by width
        b = x/a * b;
        a = x;
    

else if ( x < a && y > b )         // image is wider than view, scale by width
    b = x/a * b;
    a = x;

else if ( x > a && y < b )         // image is taller than view, scale by height
    a = y/b * a;
    b = y;

else if ( x == a ) 
    a = y/b * a;
    b = y;
 else if ( y == b ) 
    b = x/a * b;
    a = x;



return CGSizeMake(a,b);


对于我使用的字符串

- (CGFloat)heightForString:(NSString *)text font:(UIFont *)font maxWidth:(CGFloat)maxWidth 
if (![text isKindOfClass:[NSString class]] || !text.length) 
    // no text means no height
    return 0;


NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
NSDictionary *attributes = @ NSFontAttributeName : font ;
CGSize size = [text boundingRectWithSize:CGSizeMake(maxWidth, CGFLOAT_MAX) options:options attributes:attributes context:nil].size;
CGFloat height = ceilf(size.height) + 1; // add 1 point as padding

return height;

在集合视图布局中

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath


if([homePageArray count]!=0)
    return [self.cellSizes[indexPath.item] CGSizeValue];
else
    return CGSizeMake(0, 0);

我在

中计算了标签函数
CGFloat HeightForString = [self heightForString:[[homePageArray objectAtIndex:indexPath.row]objectForKey:@"item_title"] font:[UIFont fontWithName:appFontRegular size:14] maxWidth:cell.frame.size.width];
        [cell.productTitleLbl setFrame:CGRectMake(10, cell.frame.size.height-60, cell.frame.size.width,(HeightForString>30)?HeightForString:30)];

但如果标签的名称很长,则单元格不会调整大小。你能帮帮我吗?

【问题讨论】:

告诉集合视图重新加载数据,以便再次调用sizeForItem ***.com/questions/18897896/… 【参考方案1】:

试试这个或浏览我发表评论的链接。

 itemTitleText =[[self.jsonData 
 objectAtIndex:indexPath.row]objectForKey:@"item_title"];


 NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[itemTitleText 
 dataUsingEncoding:NSUTF8StringEncoding] options:@NSDocumentTypeDocumentAttribute: 
 NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber 
 numberWithInt:NSUTF8StringEncoding] documentAttributes:nil error:nil];


    CGRect labelRect = [itemTitleText
                        boundingRectWithSize:CGSizeMake(270, CGFLOAT_MAX)
                        options:NSStringDrawingUsesLineFragmentOrigin
                        attributes:@
                         NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue- 
   Medium" size:14.0]
                                     
                        context:nil];
    cell.itemTitleText.frame=CGRectMake(cell.itemTitleText.frame.origin.x, 
     cell.itemTitleText.frame.origin.y, cell.itemTitleText.frame.size.width, 
    labelRect.size.height);

【讨论】:

以编程方式添加内容时如何增加表格单元格的高度?

】以编程方式添加内容时如何增加表格单元格的高度?【英文标题】:HowtoIncreaseTableCellHeightWhenContentAddedProgrammatically?【发布时间】:2016-05-2610:10:22【问题描述】:我正在开发一个应用程序。我有一些来自服务器的数据。现在我... 查看详情

如何以编程方式为ios中的集合视图单元格提供宽度和高度,swift 3

】如何以编程方式为ios中的集合视图单元格提供宽度和高度,swift3【英文标题】:Howtogivewidthandheightprogramaticallyforcollectionviewcellinios,swift3【发布时间】:2016-12-1610:56:31【问题描述】:我试图以编程方式给出collectionViewCell的高度和... 查看详情

如何根据标签文本快速更改表格视图单元格高度?

】如何根据标签文本快速更改表格视图单元格高度?【英文标题】:Howtochangetableviewcellheightaccordingtolabeltextswift?【发布时间】:2017-09-2010:24:10【问题描述】:在Swift中使用UITableView,有人可以帮我根据标签、图片和描述自动更改单... 查看详情

根据单元格OBjective-C中的标签文本(动态)增加单元格高度

】根据单元格OBjective-C中的标签文本(动态)增加单元格高度【英文标题】:IncreasetheCellHeightbasedonthelabeltext(Dynamic)incellOBjective-C【发布时间】:2017-03-2306:39:34【问题描述】:如何根据单元格中的标签文本(动态)增加单元格高度... 查看详情

增加表格视图单元格默认附件类型的高度

】增加表格视图单元格默认附件类型的高度【英文标题】:Increasingtheheightofthetableviewcellsdefaultaccessorytype【发布时间】:2012-08-0905:22:38【问题描述】:我是iphone开发新手。我正在为我的表格视图单元格使用UITableViewCellAccessoryCheckmar... 查看详情

如何根据swift 3中的集合视图高度动态增加表格视图高度?

】如何根据swift3中的集合视图高度动态增加表格视图高度?【英文标题】:howtoincreasetableviewheightdynamicallyaccordingtocollectionviewheightinswift3?【发布时间】:2017-12-1907:37:59【问题描述】:在这里,我有一个如下所示的设计,其中我设... 查看详情

在iOS中选择单元格时如何以编程方式更改原型单元格中的标签文本颜色和图像

...在iOS中选择单元格时如何以编程方式更改原型单元格中的标签文本颜色和图像【英文标题】:HowtochangelabeltextcolorandimageinprototypecellprogrammaticallywhencellselectediniOS【发布时间】:2014-03-0914:29:12【问题描述】:我遇到了一个奇怪的问... 查看详情

使用Objective C增加单元格数量时如何动态增加UITableView高度?

】使用ObjectiveC增加单元格数量时如何动态增加UITableView高度?【英文标题】:HowtoincreaseUITableViewHeightDynamicallyWhennumberofcellisincreasedusingObjectiveC?【发布时间】:2017-11-2911:32:38【问题描述】:我是iOS新手。我已经实现了一个成功填充... 查看详情

以编程方式动态调整多行 UILabel 和随附的表格视图单元格

...itableviewcell中动态调整uilabel的大小,以及如何根据我放入标签的文本来调整表格单元格的高度。我想在表格视图单元 查看详情

如何以编程方式在单元格内创建文本字段或标签?

】如何以编程方式在单元格内创建文本字段或标签?【英文标题】:HowdoIcreateatextfieldorlabelinsideacellprogrammatically?【发布时间】:2013-06-0723:07:44【问题描述】:我有一个包含5个单元格的表格视图。我添加了一个带有情节提要的UIIma... 查看详情

以编程方式将按钮添加到集合视图单元格

】以编程方式将按钮添加到集合视图单元格【英文标题】:ProgrammaticallyAddingButtonToCollectionViewCell【发布时间】:2013-04-0420:52:58【问题描述】:我在Xcode4.6中有一个应用程序。在一个视图控制器中,我有一个集合视图。通过用户与... 查看详情

动态表格视图单元格,以编程方式更改子视图高度

】动态表格视图单元格,以编程方式更改子视图高度【英文标题】:Dynamictableviewcell,changeofsubviewheightprogrammatically【发布时间】:2015-09-1704:40:24【问题描述】:我有一个带有自定义视图单元格的UITableViewCell。在这个视图单元格中... 查看详情

如何在swift ios中调整集合视图单元格的高度?

...布时间】:2018-03-1210:42:45【问题描述】:我的单元格包含标签和文本视图,我想调整文本视图的高度单元格高度也应该调整。请帮忙谢谢【问题讨论】:如果您在单元格内使用textView,则单元格高度不会根据textView内容进行调整... 查看详情

动态增加表格行高

...述】:我有一个表格,其中包含一个自定义单元格、一个标签和一个文本字段。我重新使用了大约5行的同一个单元格。只有当用户在文本字段上输入时,我才想在我的文本字段下方显示一个视图。当我在第一个文本字段视图中... 查看详情

动态单元格高度的自动布局约束

...。有人可以详细解释一下根据表格视图单元格中的文本使标签增加高度的步骤是什么。我想增加标签高度,然后增加单元格高度。谢谢。【问题讨论】:【参考方案1】:对于iOS8+,您可以找到解释和示例he 查看详情

多个自定义视图的自动布局问题

...一个视图有一个动态单元格,它的高度随着自定义视图的增加而增加,并且对单元格高度 查看详情

如何单击按钮并更改表格视图单元格中的标签文本

】如何单击按钮并更改表格视图单元格中的标签文本【英文标题】:Howcaniclickbuttonandchangelabeltextintablewviewcell【发布时间】:2017-11-2809:22:45【问题描述】:当我点击每个TableViewCell中的按钮时,我想更改标签文本我的意思是有2(-,+)... 查看详情

以编程方式创建形状视图并在集合视图单元格上使用

】以编程方式创建形状视图并在集合视图单元格上使用【英文标题】:Programmaticallycreateshapeviewanduseoncollectionviewcell【发布时间】:2018-02-0519:37:36【问题描述】:我使用swift以编程方式创建自定义视图。我用CAShapeLayer创建了三角形... 查看详情