试图使UITableViewCell的标签宽度有限,但高度不受限制

时间:2013-06-04 10:39:30

标签: ios objective-c uitableview

我想设置我的标签在UITableViewCell中有一个固定的宽度,这样我的文字就可以在2行以上,但我总是在单元格的右侧有预留空格来显示另一行图。

到目前为止,我尝试过这样做但它不起作用。 UILabel恰好在整个darned单元格中运行。我希望它受到限制,使得文本在包裹到第二行之前可能达到通过单元格的3/4。

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

    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyle)UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];

        [cell.textLabel setLineBreakMode:NSLineBreakByWordWrapping];
        cell.textLabel.minimumScaleFactor = 0;
        [cell.textLabel setNumberOfLines:0];
        [cell.textLabel setFont:[UIFont boldSystemFontOfSize:FONT_SIZE]];
        [cell.textLabel setBackgroundColor:[UIColor clearColor]];;

        NSString * labelText = myString; // lets just pretend this works. I have somethign else here.

        CGSize constraint = CGSizeMake((CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2) - 100.0f), 20000.0f); // Ultimate cell 
        CGSize size = [labelText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];
        [cell.textLabel setText:labelText];
        [cell.textLabel setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2) - 180.0f, MAX(size.height, 36.0f))]; // Lets me get the height of the text, supposedly.
        }

// more stuff....

}

3 个答案:

答案 0 :(得分:2)

您需要为UITableViewCell创建子类,并在layoutSubviews中设置标签的大小。

虽然在创建单元格时标签的大小正确,但每次在屏幕上绘制单元格时,UITableViewCell方法都会“覆盖”大小,因此您看不到任何更改。

答案 1 :(得分:1)

你应该尝试这个link,可能会让你的问题得到解决或者有所了解。

干杯!!!

答案 2 :(得分:0)

试试这个,你得到字符串大小的标签高度

CGSize maximumLabelSize = CGSizeMake(width, FLT_MAX);
    CGSize expectedLabelSize = [string sizeWithFont:font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByTruncatingTail];
//you get height from expectedLabelSize.height