IOS TableView行的高度

时间:2012-02-07 20:41:37

标签: ios uitableview

我需要有2种行。一个高度为44像素,另一个高度为90px:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath   *)indexPath {
    if (indexPath.section == 0) 
        return 90.0;
    else
        return 44.0;
}

问题是当我调用 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath因为我需要使用90px向具有90px高度的scrollView添加到单元格但是它已添加到单元格的中间位于顶部。

 if (indexPath.section == 0) {
        cell = [tableView dequeueReusableCellWithIdentifier:ScrolledCellIdentifier];
        if (cell == nil)
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ScrolledCellIdentifier];
        //cell.textLabel.text = @"hi";

        [cell addSubview:self.scrollView];
    }

尝试设置单元格的textLabel有效,问题是添加了scrollView。

如果我将此行添加到代码中:

self.scrollView.frame = CGRectMake(0,-45, 320, 90);

它完美无缺,但对我来说听起来有些奇怪。发生了什么事?

3 个答案:

答案 0 :(得分:1)

在添加之前,将scrollView的框架设置为单元格的边界。

所以

self.scrollView.frame = cell.bounds;
[cell addSubview:self.scrollView];

调试... NSLog ....输出事物的帧,这样你就可以看到它们的位置,而不是你想要它们的位置。用它来输出帧坐标:

NSLog(@"Frame is: ", NSStringFromCGRect(self.scrollView.frame));

或定义一个很好的快捷方式,因为我一直使用它

#define LogCGRect(rect) NSLog(@"CGRect:%@", NSStringFromCGRect(rect));

然后你可以做

LogCGRect(self.scrollview.frame);

答案 1 :(得分:1)

它只是将scrollview放入tableviewcell,无论它的高度是44还是90.

答案 2 :(得分:1)

我使用此代码解决了我的问题:

cell = [tableView dequeueReusableCellWithIdentifier:ScrolledCellIdentifier];
if (cell == nil)
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ScrolledCellIdentifier];
cell.frame = CGRectMake(0, 0, 320, 90);
self.scrollView.frame = CGRectMake(0,0, 320, 90);
[cell addSubview:self.scrollView];

我不知道它是否错了但是有效......