UITableView方法被TableView大小覆盖

时间:2015-03-09 23:47:59

标签: ios objective-c uitableview

问题中的代码如下:

-(void)addSpeedTable {


    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"newCell"];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 45;
    self.tableView.sectionFooterHeight = 22;
    self.tableView.sectionHeaderHeight = 22;

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView = _tableView;
    NSLog(@"TableView Frame %@", NSStringFromCGRect(self.tableView.frame));

    [self.view addSubview:self.tableView];


}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"newCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"newCell"];

    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    cell.textLabel.text = @"Test";

    return cell;
}

正如您所看到的,如果我将某个部分设置为1并将行设置为1,但是当添加视图时,该表将占用整个屏幕,我认为这是因为我使用视图边界的框架启动。

有没有办法强制表只是所需行的大小?

我的计划是在这个单一视图中添加多个表格,我希望它们一个接一个地显示标题标签和滚动视图。我希望高度由行数决定。

由于

更新的代码感谢正确的回答:

-(void)addSpeedTable {


    CGRect frame = self.tableView.frame;
    frame.size.height = (40 * resultHeadings.count)+35;
    frame.size.width = self.view.frame.size.width;

    //If more than one table has been shown increase Y axis height for view
    if(tablesDisplayed > 0) {
        NSLog(@"Tables displayed greater than zero");
        viewHeight = viewHeight + frame.size.height;
    }

    frame.origin.y = viewHeight;
    frame.origin.x = 0;



    self.tableView = [[UITableView alloc] initWithFrame:frame];

   [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"newCell"];
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;

    self.tableView.rowHeight = 40;
    self.tableView.sectionFooterHeight = 0;
    self.tableView.sectionHeaderHeight = 22;
    self.tableView.scrollEnabled = NO; // Disable ScrollView


    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView = _tableView;
    NSLog(@"TableView Frame %@", NSStringFromCGRect(frame));

    [self.view addSubview:self.tableView];
    tablesDisplayed++; 
}

由于我从长远来看添加了多个表格,因此我会根据计算来计算高度。这非常有效。

1 个答案:

答案 0 :(得分:1)

以下是您可以尝试的两件事。如果不知道调用addSpeedTable的位置,我就会错误地将其放入cellForRowAtIndexPath方法中。

  1. 将高度设置为self.tableView.contentHeight

    CGRect frame = self.tableView.frame;
    frame.size.height = self.tableView.contentSize.height;
    self.tableView.frame = frame;
    
  2. 致电[self.tableView sizeToFit]