首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >努力使UITableViewAutomaticDimension工作

努力使UITableViewAutomaticDimension工作
EN

Stack Overflow用户
提问于 2016-06-20 09:50:59
回答 3查看 268关注 0票数 0

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

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

所以现在我检查了几点:

  1. 属性检查器中单元格的“线条”属性设置为0。
  2. 我对标签有4个约束(图片相关)。
  3. heightForRowAtIndexPath方法只包含return UITableViewAutomaticDimension;

下面是使用UITableViewAutomaticDimension的代码:

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.tableView.estimatedRowHeight = 50.0;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}    

Constraints screenshot <======

EN

回答 3

Stack Overflow用户

发布于 2016-06-20 09:55:43

尝尝这个

代码语言:javascript
复制
- (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;
  } 

或者试一试

代码语言:javascript
复制
- (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;


}
票数 0
EN

Stack Overflow用户

发布于 2016-06-20 09:57:08

代码语言:javascript
复制
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
   return UITableViewAutomaticDimension;
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-20 10:11:46

您需要在IB或代码中设置

代码语言:javascript
复制
[yourLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis: UILayoutConstraintAxisVertical];
[yourLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis: UILayoutConstraintAxisVertical];

在设置文本之后,调用这个

代码语言:javascript
复制
[cell setNeedsDisplay];
[cell layoutIfNeeded];

希望能帮上忙。我是从苹果的“自我标尺”中学到的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37919384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档