UILabel不会改变setFrame上的高度
我试图改变一个UILabel
的高度取决于标签中有多less文字。
我可以计算标签所需的大小,但是当我尝试设置UILabel
框架时,它不会改变。
以下是我的代码。 即使我将最后一行中的size.heightreplace为500, UILabel
框架的大小也不会改变
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"GameItemCell"; GameItemCell *cell = (GameItemCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GameItemCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; GameItem* item = [_hunt.gameItems objectAtIndex: indexPath.row]; cell.itemHeaderLabel.text = [NSString stringWithFormat:@"#%d - (%d pts)", indexPath.row+1, item.itemPoints]; UILabel* textLabel = cell.itemTextLabel; textLabel.text = item.itemText; textLabel.lineBreakMode = NSLineBreakByWordWrapping; CGRect frame = cell.itemTextLabel.frame; CGSize textSize = { frame.size.width, 20000.0f }; CGSize sizeOneLine = [@"one line" sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping]; CGSize cellTextSize = [item.itemText sizeWithFont:cell.itemTextLabel.font constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping]; CGSize sizeOneLineSpacing = CGSizeMake(sizeOneLine.width, sizeOneLine.height + 3); NSInteger lines = cellTextSize.height / sizeOneLine.height; CGSize size = CGSizeMake(frame.size.width, lines * sizeOneLineSpacing.height); textLabel.frame = CGRectMake(frame.origin.x, frame.origin.y, size.width, size.height); return cell; }
你必须在GameItemCell里设置你的标签的框架-(void)layoutSubviews
而不是做所有这些艰苦的工作,尝试像这样:
textLabel.numberOfLines = 0; textLabel.text = textString; [textLabel sizeToFit];
记住sizeToFit
尊重你的标签默认宽度,所以根据你的要求设置宽度。 然后Height将由sizeToFit
方法pipe理。
最后,你将需要在你的UITableViewCell子类中放入类似这两个方法的东西:
// call this method on your cell, during cellForRowAtIndexPath // provide your resizing info (frame, height, whatever) - (void) updateLabelFrame:(CGRect)newLabelFrame { self.resizedLabelFrame = newLabelFrame; [self setNeedsLayout]; } // the actual resize happens here when UIKit gets around to it - (void) layoutSubviews { [super layoutSubviews]; self.myLabel.frame = self.resizedLabelFrame; }
您已经错过了要设置的numberOfLines
属性。
地址:
textLabel.numberOfLines = 0;
CGRect labelFrame = myLabel.frame; labelFrame.size = [myLabel.text sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(myLabel.frame.size.width, CGFLOAT_MAX) lineBreakMode:myLabel.lineBreakMode]; cell.textLabel.frame = labelFrame;
numberOfLines
用于呈现文本的最大行数。
此属性的默认值为1.要删除任何最大限制,并根据需要使用尽可能多的行,请将此属性的值设置为0。
看看UILabel类参考
根据你的问题,你可以设置任何行
现在行数没有设置到您的标签,所以设置它,
textLabel.numberOfLines = lines;
是的,多行使用textLabel.numberOfLines = 0; 在cellForRowAtIndexPath中
但是你仍然需要改变单元的高度:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // Calculate new cell height too as you are doing in cellForRowAtIndexPath return YOUR_SIZE;; }
尝试这个 :
NSString *text1 = shareObjC.commentText; CGSize constraint1 = CGSizeMake(280 - (size.width + 5), 2000); CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap]; UILabel *lblComment = [[[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] autorelease]; lblComment.lineBreakMode = UILineBreakModeWordWrap; lblComment.numberOfLines = size1.height/15; [lblComment setFont:[UIFont systemFontOfSize:12]]; lblComment.text = text1; [cell.viewLikeComment addSubview:lblComment];