更改TableView或TableViewCell的宽度

时间:2014-02-07 11:49:17

标签: ios objective-c uitableview interface-builder

嘿大家:)我试着改变我的细胞的宽度,这样细胞和tableview边界之间就有一点空间。我尝试了在stackoverflow上找到的所有内容,但没有成功。

我使用界面构建器创建了tableview,所以首先我简单地尝试将tableview大小设置为“freeform”并将宽度拖动到300.0f,但没有任何事情发生。比我尝试在我的“viewDidLoad”中以编程方式执行:

self.tableView.frame = CGRectMake(10.0f, self.tableView.frame.origin.y, 300.0f, self.tableView.frame.size.height);

但是这里也没有任何反应......我试图直接改变细胞:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

GTNewsCustomCell *newsCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

newsCell.contentView.frame = CGRectMake(10.0f, 0, 300, newsCell.frame.size.height);

}

但同样的问题......我想念的任何想法?

编辑:此问题的另一个解决方案是更改自定义单元格的框架:

- (void)setFrame:(CGRect)frame {
    frame.origin.x += inset;
    frame.size.width -= 2 * inset;
    [super setFrame:frame];
}

4 个答案:

答案 0 :(得分:4)

试试吧 在您的自定义单元格中放置一个属性,如

   in .h file
   @interface GTNewsCustomCell : UITableViewCell
   @property (nonatomic, assign)CGRect cellFrame;

   in .m file
   - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
   { 
      self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
      if (self) {
       // Initialization code
       self.backgroundColor = [UIColor greenColor];//for testing purpose only
   } 
   return self;
 }

  - (void)setSelected:(BOOL)selected animated:(BOOL)animated
   {
       [super setSelected:selected animated:animated];

       // Configure the view for the selected state
   }

    //automatically called 
   - (void)layoutSubviews
  {
      [super layoutSubviews];
       CGRect cellRect = self.bounds;
       cellRect.size.width = self.cellFrame.size.width;

       self.bounds = cellRect;

  }

   .in .m of viewController

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        GTNewsCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        if(cell == nil)
        {
            cell = [[GTNewsCustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        }
       cell.cellFrame = CGRectMake(10, 0, tableRect.size.width,40);//hear tableRect is the frame of your tableview
       return cell;
   }

不确定尝试这个希望这有助于你

答案 1 :(得分:1)

为此,首先您可以使用UIImageView覆盖整个视图并将其图像设置为边框图像。现在在此imageview上添加一个表格视图,并设置宽度,以便可以看到此图像的边框。

答案 2 :(得分:0)

我认为你想要Tableviewcell的动态高度而不是宽度。

UITableView的委托方法将有助于此:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

将返回每个细胞的高度。您可以将其实现为以下示例代码。这是基于动态文本内容显示动态高度。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  //set width depending on device orientation
  self.cellPrototype.frame = CGRectMake(self.cellPrototype.frame.origin.x,     self.cellPrototype.frame.origin.y, tableView.frame.size.width, self.cellPrototype.frame.size.height);

 CGFloat quotationLabelHeight = [self sizeOfLabel:self.cellPrototype.quotationLabel withText:[self quotationTextForRow:indexPath.row]].height;
CGFloat attributionLabelHeight = [self sizeOfLabel:self.cellPrototype.attributionLabel withText:[self attributionTextForRow:indexPath.row]].height;
CGFloat padding = self.cellPrototype.quotationLabel.frame.origin.y;

CGFloat combinedHeight = padding + quotationLabelHeight + padding/2 + attributionLabelHeight + padding;
CGFloat minHeight = padding + self.cellPrototype.avatarButton.frame.size.height + padding;

return MAX(combinedHeight, minHeight);
}

您可以尝试使用this too

答案 3 :(得分:-2)

使用此:

   - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

委托UITableView的方法并返回一个浮点值(CellHight + space bw cells)。