6

我遇到了一个奇怪的问题。我正在为我的表格视图创建一个自定义选定视图。但是,此选择视图不太适合。我发现这是因为我的选择视图是 300 像素,而单元格本身是 320 像素。奇怪的是,它UITableView的宽度实际上只有 300px。如何调整表格的单元格宽度?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *tableIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];

  if (cell == nil)
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier] autorelease];


  if (tableView == bandTable)
  {
    UIImageView *imageBg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"column1_selected.png"]];
    [imageBg setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

    [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [cell setSelectionStyle:UITableViewCellSelectionStyleGray];
    [cell setSelectedBackgroundView:imageBg];
    [imageBg release];

    NSArray *array = [bandDictionary objectForKey:@"Bands"];

    cell.textLabel.text = [array objectAtIndex:indexPath.row];
    NSLog(@"CELL: %f", cell.bounds.size.width);
  }
  return cell;
}
4

4 回答 4

4

刚设置

cell.frame = CGRectMake(0,
                        0,
                        self.tableView.frame.size.width,
                        cell.frame.size.height);

cellForRowAtIndexPath.

于 2012-10-23T09:14:10.803 回答
2

创建单元格后添加这两行,

[[cell contentView] setFrame:[cell bounds]];
[[cell contentView] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
于 2015-03-25T12:05:21.430 回答
0

@IvorPrebeg,您不应该为UITableViewCellinside设置框架cellForRowAtIndexPath。将UITableViewCell自动设置为执行UITableView后的宽度。这将在您插入的标签上设置值后自动完成。celllayoutSubviewscell

heightForRowAtIndexPath根据字体和插入到其中的文本与单元格内的文本相同的大小来计算内部大小非常重要cell。就我而言,它看起来像这样:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath{+
    ChatMessage *message = 
     [self.fetchedResultsController objectAtIndexPath:indexPath];

    CGSize size = [message.text sizeWithFont:self.messageCell.labelMessage.font
                       constrainedToSize:CGSizeMake(self.tableView.frame.size.width * 0.8f, HUGE_VAL)
                           lineBreakMode:NSLineBreakByWordWrapping];

    return size.height;
}

而不是在里面UITableViewCell

- (void)layoutSubviews{
    [super layoutSubviews];

    if( _fInitWidth == 0 ){
        self.labelMessage.preferredMaxLayoutWidth = 
           self.bounds.size.width * 0.8f;
    }    
    [self.contentView setNeedsDisplay];
}

如您所见,prefferedMaxLayoutWidth内部UILabelmyUITableViewCell将是cells宽度的 0.8 (320 * 0.8)。设置单元格属性LayoutSubviews后将在内部执行。cellForRowAtIndex之后,UITableView将调用heightForRowAtIndexPath并计算高度的大小。因此,我UILabels通过传递一个 width * 0.8 for constrainedToSize(tableview width is 320.0 * 0.8) 来计算大小,与cell.

示例值适用于 iPhone 设备,它们当然会在更大的屏幕上发生变化。

于 2015-03-25T11:58:02.000 回答
0

在 C# 上:

public UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath){

  UITableViewCell cell = new UITableViewCell();
  cell.Frame = new CoreGraphics.CGRect(0, 0,this.selectSchoolTableview.Frame.Width, cell.Frame.Size.Height);
  cell.ContentView.AutosizesSubviews = true;
  return cell;
}

另一个技巧:

public UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath){

UITableViewCell cell = new UITableViewCell();
cell.Accessory = UITableViewCellAccessory.None;
cell.ContentView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth;
cell.ContentView.AutoresizingMask = UIViewAutoresizing.FlexibleHeight;
return cell;

 }
于 2018-05-17T11:11:44.477 回答