代码之家  ›  专栏  ›  技术社区  ›  Bob Spryn

可变高度ui视图和标签

  •  3
  • Bob Spryn  · 技术社区  · 16 年前

    好的,我现在不在表格单元格中。(我看过很多关于细胞高度的线索。)

    我有一个细节视图,在视图的顶部有一个标题和描述,在它下面有一个表视图。如果描述的长度会有所不同,如何让TableView相应地进行调整,使其始终从其正下方开始?

    我在应用商店应用程序中看到了苹果这样做。如果你看一个应用程序描述(就像你要买它一样),他们会有一个应用程序描述,然后在屏幕截图的滚动窗格后面的任何地方结束。他们如何在这样的文本描述上改变高度?

    它们都是以编程方式完成的,还是我可以使用ib中的布局控件来完成相同的工作?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Mihir Mehta    16 年前

    您需要在视图中以编程方式添加表视图,并根据详细视图的大小设置其框架。

    1>获取详细视图的当前框架 2>添加它的高度,然后将TableView添加到视图中

    喜欢

    UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(initX , initY + DetailViewFrame.size.height, TableWidth, TableHeight) style:UITableViewStylePlain];
    [view addSubView:table];
    
        2
  •  1
  •   user23743    16 年前

    ib中的布局控件在父视图调整大小时更改视图的大小。在这种情况下,(我假设)标签视图和表视图是兄弟视图,因此您需要通过编程来实现这一点。如果要调整标签的大小,请找到标签的底部(原点的Y位置加上标签的高度),然后使用它来指导放置表格视图的位置。您可能会在-viewdidload或-viewwill中执行此操作,具体取决于您何时有足够的信息进行计算。

        3
  •  0
  •   progrmr    16 年前

    我认为您需要使用“sizeWithFont”来计算运行时的单元高度,请参见以下内容:

    - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath
    {
      CGSize labelSize = CGSizeMake(200.0, 20.0);
      if ([string length] > 0)
        labelSize = [string sizeWithFont: [UIFont boldSystemFontOfSize: 17.0] constrainedToSize: CGSizeMake(labelSize.width, 1000) lineBreakMode: UILineBreakModeWordWrap];
      return 24.0 + labelSize.height;
    }
    

    在“cellforrowatindexpath”中

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
            cell.accessoryType = UITableViewCellAccessoryNone;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.autoresizingMask = UIViewAutoresizingFlexibleHeight;       
        }
    
    cell.textLabel.text = @"Your string with variable length";              
            [cell.textLabel setFont:[UIFont boldSystemFontOfSize:12]];
            //[cell.textLabel setAdjustsFontSizeToFitWidth:YES]; 
            [cell.textLabel setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines]; 
            [cell.textLabel setLineBreakMode:UILineBreakModeWordWrap];
            [cell.textLabel setNumberOfLines:0];
    return cell;
    }
    

    希望这能帮助你…