自定义UITableViewCell的UI问题

时间:2013-05-16 21:23:11

标签: ios objective-c uitableview customization

我有一个自定义UITableViewCell。这些有以下问题:

  1. 删除按钮太右,与我的背景重叠。我想设置一个插图,使它向左移动一点,然后看起来很棒。
  2. Delete button overlapping

    蓝色突出显示的状态跨越屏幕的整个宽度,我希望它只是设置在我的弯曲细胞背景的边界内。

    Highlighted state

    有没有办法解决这两个问题?谢谢。

    修改:我的代码如下设置背景(只是一个自定义方法):

    - (UIImage *)cellBackgroundForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSInteger rowCount = [self tableView:[self tableView] numberOfRowsInSection:0];
        NSInteger rowIndex = indexPath.row;
        UIImage *background = nil;
    
        if (rowIndex == 0) {
            background = [UIImage imageNamed:@"cell_top.png"];
        } else if (rowIndex == rowCount - 1) {
            background = [UIImage imageNamed:@"cell_bottom.png"];
        } else {
            background = [UIImage imageNamed:@"cell_middle.png"];
        }
    
        return background;
    }
    

    然后我在reloadTable void方法中调用此方法,该方法只获取每个单元格并在行更新(添加或删除行,因为该表有3个不同的图像)后更新它。在我获取的结果控制器从Core Data获取所有项目并首次加载表之后,我也会调用它。

    编辑2:这是reloadTable方法的代码:

    - (void)refreshTable
    {
        for (NSInteger j = 0; j < [self.tableView numberOfSections]; ++j)
        {
            for (NSInteger i = 0; i < [self.tableView numberOfRowsInSection:j]; ++i)
            {
                UIImage *background = [self cellBackgroundForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]];
    
                UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
                cellBackgroundView.image = background;
                UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]];
                cell.backgroundView = cellBackgroundView;
            }
        }
    }
    

    问题是:我不知道如何设置tableView或表格视图单元格的边距或宽度。我需要继承某些东西吗?一般情况如何?

1 个答案:

答案 0 :(得分:1)

问题是您的表格视图框架宽度,所选单元格的蓝色将填充整个单元格,因此您应该减小表格视图的宽度,这样它将有一些margins这样的方式delete按钮也会出现在左侧。但是当你选择它们时,第一个和最后一个单元格仍然会有问题,因为它们有圆角但是蓝色选择没有圆角所以我建议你应该为选定状态创建一个.png图像(一个第一个单元格) ,一个用于中间细胞,一个用于底部细胞)

修改

在iOS中,margins的概念不存在,我只是使用了这个术语,因为我认为它会更容易理解,但是你需要做的就是在左边显示一点空间表右视图:

yourTableView.frame = CGRectMake(leftMarginSpace,
                                 0,
                                 self.view.frame.size.width 
                                     - leftMarginSpace 
                                     - rightMarginSpace, 
                                 self.view.frame.size.height);

因此,如果您将表视图添加到视图控制器的视图中,那么表视图将位于距离左侧leftMarginSpace距离处,位于视图控制器顶部(0 y位置)的{{1}处距离右边的距离将具有视图控制器的高度。

如果将表视图作为子视图添加到另一个视图(而不是视图控制器的视图),则必须像这样更改框架:

rightMarginSpace

我还注意到您要创建一个分组的表格视图样式,因此您应该检查yourTableView.frame = CGRectMake(leftMarginSpace, 0, parentView.frame.size.width - leftMarginSpace - rightMarginSpace, parentView.frame.size.height);