试图使UITableViewAutomaticDimension工作

时间:2016-06-20 09:50:59

标签: ios objective-c xcode

我必须解决现有项目中的一些问题(Objective-C,Xcode 7.3,iOS)。

这里我有一个表格视图,其中我需要一些可调整大小的单元格以适应内容。细胞包括标签。该项目使用UITableViewAutomaticDimension但似乎无法正常工作。单元格中的文字超出了右边界。

所以现在我检查了一些观点:

  1. “属性”检查器中单元格的“Lines”属性设置为0.
  2. 我对Label有4个约束(pic相关)。
  3. heightForRowAtIndexPath方法仅包含return UITableViewAutomaticDimension;
  4. 以下是使用UITableViewAutomaticDimension的代码:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        self.tableView.estimatedRowHeight = 50.0;
        self.tableView.rowHeight = UITableViewAutomaticDimension;
    }    
    

    Constraints screenshot <======

3 个答案:

答案 0 :(得分:0)

试试这个

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

    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 186, 0)]; //max width that is allowed for label
    lbl.numberOfLines = 0;
    lbl.lineBreakMode = NSLineBreakByWordWrapping;

    int GAP = 3;
    float height = 0;
    float fontSize = 14;
    NSString *cellText = yourtext;
    lbl.font= [ UIFont fontWithName:FONT_NAME_Ubuntu size: fontSize];
    bl.text = cellText;
    [lbl sizeToFit];
    height += lbl.frame.size.height;
    height += GAP;

    return height;
  } 

或尝试低于一个

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

        /*
        for dynamic cell heigh according to the description display in cell
         */

        NSDictionary *dict1 = (NSDictionary*)[array objectAtIndex:indexPath.row];
        NSString *cellText = [dict1 valueForKey:@"test"];
        UIFont *cellFont = [UIFont fontWithName:FONT_NAME_GOTHAM_4 size:11.0];
        CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
        CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];


            return labelSize.height + 80;


}

答案 1 :(得分:0)

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
   return UITableViewAutomaticDimension;
}

答案 2 :(得分:0)

您需要在IB或代码中设置

[yourLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis: UILayoutConstraintAxisVertical];
[yourLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis: UILayoutConstraintAxisVertical];

设置文本后调用

[cell setNeedsDisplay];
[cell layoutIfNeeded];

希望这有帮助。我从Apple的自我调整示例中获取了这个