具有包装标签的静态表格单元的动态高度?

Ste*_*her 8 uitableview ios uistoryboard

我的文字在纵向模式下是两行.当我切换到横向模式时,它适合单行.我通过故事板使用静态tableview单元格; 我怎样才能调整行的大小以适应?

屏幕是一个登录屏幕.

  • 第一个单元格包含一些解释文本
  • 第二个是用于输入帐户名称的文本字段
  • 第三个是用于输入密码的安全文本字段
  • 第四个(和最后一个)单元格包含登录按钮.键盘上的返回键会提交表单或根据需要切换焦点

Par*_*iya 9

用途UITableView's heightForRowAtIndexPath:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   int topPadding = 10;
   int bottomPadding = 10;
   float landscapeWidth = 400;
   float portraitWidth = 300;

   UIFont *font = [UIFont fontWithName:@"Arial" size:22];

   //This is for first cell only if you want for all then remove below condition
   if (indexPath.row == 0) // for cell with dynamic height
   {
      NSString *strText = [[arrTexts objectAtIndex:indexPath.row]; // filling text in label  
     if(landscape)//depends on orientation
     {
       CGSize maximumSize = CGSizeMake(landscapeWidth, MAXFLOAT); // change width and height to your requirement
     }
     else //protrait
     {
       CGSize maximumSize = CGSizeMake(portraitWidth, MAXFLOAT); // change width and height to your requirement
     }

     //dynamic height of string depending on given width to fit
     CGSize textSize = CGSizeZero;
     if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")
     {
        NSMutableParagraphStyle *pstyle = [NSMutableParagraphStyle new];
        pstyle.lineBreakMode = NSLineBreakByWordWrapping;

        textSize = [[strText boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :font,NSParagraphStyleAttributeName:[pstyle copy]} context:nil] size];
     }
     else // < (iOS 7.0)
     {
        textSize = [strText sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping] 
     }

     return (topPadding+textSize.height+bottomPadding) // caculate on your bases as u have string height
   }
   else
   {
       // return height from the storyboard
       return [super tableView:tableView heightForRowAtIndexPath:indexPath];
   }
 }
Run Code Online (Sandbox Code Playgroud)

编辑:已添加for supportfor > and < ios7和as sizeWithFont方法在iOS 7.0中已弃用


Aar*_*ing 8

我已经成功实现了一点点简单.只要静态表视图对单元格有适当的约束,您就可以要求系统为您调整大小:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    let cell = self.tableView(self.tableView, cellForRowAtIndexPath: indexPath)
    let height = ceil(cell.systemLayoutSizeFittingSize(CGSizeMake(self.tableView.bounds.size.width, 1), withHorizontalFittingPriority: 1000, verticalFittingPriority: 1).height)
    return height
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可能仍然有用.我已经遇到iOS 9中的实例,其中具有适当约束的静态表视图在更改标签文本后不会正确地动态调整大小.上面的解决方法解决了这个问题,而UITableViewAutomaticDimension则没有. (2认同)