【问题标题】:Autosize UILabels in custom style UITableViewCell以自定义样式 UITableViewCell 自动调整 UILabel
【发布时间】:2014-06-26 05:31:45
【问题描述】:

我有一个带有两个单元原型的UITableView。一个(上面屏幕截图中的第一个)您可能会识别为 subtitle 样式的标准单元格。第二个是custom,带有一个额外的文本字段。

当我运行该应用程序时,使用第一个模板的标签根据其中文本的大小很好地调整其宽度,而使用自定义模板的标签不会缩放,有效地在三个字符后剪切文本。

有没有办法在 XCode Storyboard 设计器中配置 custom 模板来调整标签的大小,就像内置的 subtitle 单元格模板一样?

【问题讨论】:

  • 为要自定义的 Cell 设置合适的自动布局约束将使其工作。
  • 如何设置每个单元格的高度?我的意思是 tableView:heightForRowAtIndexPath:
  • @Danyun 为什么这很重要?我返回 44 或 88,具体取决于给定单元格正在使用的模板(分别为第一个或第二个)
  • 你是在考虑宽度还是高度?问题可能不同。如果宽度可能是您在自动布局中将“标题”标签设置为固定宽度,因此它无法表达其固有的内容大小。
  • 啊,我知道混乱在哪里了。我说的是宽度。更新了问题以使其明确。

标签: ios iphone objective-c uitableview


【解决方案1】:

如图设置约束

图片中截断的标签(T..)是TextField。

将单元格的行高设置为最小尺寸为 155。

【讨论】:

    【解决方案2】:

    试试这个:

    您可以根据在文本字段中输入的文本更改标签的大小

    -(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode      
    {
    
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStyle.lineBreakMode = lineBreakMode;
    
    NSDictionary * attributes = @{NSFontAttributeName:font,
                                  NSParagraphStyleAttributeName:paragraphStyle
                                  };
    CGRect textRect = [text boundingRectWithSize:size
                                         options:NSStringDrawingUsesLineFragmentOrigin
                                      attributes:attributes
                                         context:nil];
    return textRect.size;
    }
    

    调用方法:

    CGSize size =[self frameForText:body sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:NSLineBreakByWordWrapping];
    

    谢谢

    【讨论】:

    • 谢谢,不过我想避免在代码中这样做。当然,通过故事板设计器一定可以实现这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2011-03-15
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多