Ios 如何在自定义UITableView单元格和UITableView之间设置相同的宽度?

Ios 如何在自定义UITableView单元格和UITableView之间设置相同的宽度?,ios,iphone,uitableview,Ios,Iphone,Uitableview,我用Interface Builder创建了几个单元格,并用它们填充UITableView。换句话说,我有3个类用于3种不同类型的单元格,还有一个视图包含UITableView -我的UITableView包含不同类型的单元格: 这是我的问题: 在iPhone模拟器上,它看起来很棒。但是在iPad模拟器上,自定义单元格宽度是固定的。UITableView的宽度与屏幕宽度相适应,因此这很好,但UITableViewCells不适合UITableView我想强制自定义UITableView单元格采

我用Interface Builder创建了几个单元格,并用它们填充UITableView。换句话说,我有3个类用于3种不同类型的单元格,还有一个视图包含UITableView

-我的UITableView包含不同类型的单元格:

这是我的问题: 在iPhone模拟器上,它看起来很棒。但是在iPad模拟器上,自定义单元格宽度是固定的。UITableView的宽度与屏幕宽度相适应,因此这很好,但UITableViewCells不适合UITableView我想强制自定义UITableView单元格采用UITableView宽度。

在实例化自定义单元格的
-(UITableViewCell*)tableView:(UITableView*)tableView cellforrowatinexpath:(nsindepath*)indepath
方法中有什么要做的吗? 或者我必须写一个像self.fitToParent这样的东西在自定义单元格头文件中

编辑(模式):

编辑2(cellForRowAtIndexPath方法):


我认为uitableviewcell的宽度与tableview的宽度相同。您可以尝试设置单元格的背景色来测试它<代码>cell.backgroundColor=[UIColor redColor]


您应该创建一个从UITableViewCell继承的类,并重写它的方法
-(void)layoutSubviews
,在那里调整内容的框架。

我在每个自定义单元格类中使用以下代码解决了我的问题。它不是很干净,但我不能在这个问题上多花一天时间

- (void)layoutSubviews
{
    CGRect contentViewFrame = self.contentView.frame;
    contentViewFrame.size.width = myTableView.bounds.size.width;
    self.contentView.frame = contentViewFrame;
}
感谢您的帮助KudoCC

- (void)awakeFromNib {
    [super awakeFromNib];
// anything you write in this section is taken with respect to default frame of width 320.
}
当[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]时调用awakeFromNib;已处理-您在节中写入的任何内容都将根据宽度为320的默认帧进行处理。 您需要创建另一个自定义函数,并在单元格初始化后调用它。 例如:

@implementation CheckinTableViewCell{
    UILabel *NameLabel;
    UILabel *rollLabel;
}

- (void)awakeFromNib {
    [super awakeFromNib];
    NameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    rollLabel = [[UILabel alloc] initWithFrame:CGRectZero];

    [self.contentView addSubview:NameLabel];
    [self.contentView addSubview:rollLabel];

}

-(void) bindView{
    NameLabel.frame = CGRectMake(10, 10, self.contentView.frame.size.width-20, 20);
    rollLabel.frame = CGRectMake(10, 30, NameLabel.frame.size.width, 20);
}
并在tableview CellForRowatinex中调用此函数:-

-(UITableViewCell*) tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    CheckinTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if(cell ==nil){
        cell = [[CheckinTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

        cell.name = @"Harry";
        cell.rollno = @"123456";

        [cell bindView];

    return cell;
}

要制作通用应用程序吗?您是否尝试在自定义单元格xib中使用自动布局?是的,我设置了两个约束:一个在左侧,另一个在右侧。但它只影响细胞的内容,而不是细胞本身。换句话说,我的自定义单元格有一个预定义的宽度,因为我在IB中设置了它。AutoLayout对此无法执行任何操作…不,uitableviewcell的宽度与tableview的宽度不同。我已经为每种单元格类型编写了一个类,但我不知道在它们的
-(void)layoutSubviews
方法中编写什么来将它们的大小调整为tableView。请看我在问题中添加的图片。您的tableviewcell是由xib加载的?您如何知道tableviewcell的宽度与tableview的宽度不同?是的,我为每个单元格类型都有一个xib,与它自己的类相关联(例如,第一个单元格:“cellType1.h”、“cellType1.m”、“cellType1.xib”)。我知道宽度不一样,因为当我启动emulator时,我得到了我在编辑中模式化的结果(每个单元格都有一个背景色)。你会在我的编辑2中找到cellForRowAtIndexPath方法。你是如何在自定义单元格类中获得myTableView引用的?@ZaidPathan当时,我将tableView放在一个丑陋的全局变量中。我认为更合适的方法是在Interface Builder中设计所有的单元格。。。
-(UITableViewCell*) tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";
    CheckinTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if(cell ==nil){
        cell = [[CheckinTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

        cell.name = @"Harry";
        cell.rollno = @"123456";

        [cell bindView];

    return cell;
}