7

我一直在到处寻找,并没有完全找到我的答案。

我用来自 JSON 的动态单元格填充 UITableView,我试图隐藏任何额外的单元格。我关闭了 IB 中的分隔符,当然所有的单元格分隔符都消失了。如何在每个 tableviewcell 的底部和顶部添加一条线,以便只有具有信息的单元格显示边框?我已经导入了 Quartz 并且一直在玩 CALayer 但找不到解决方案。

我在这里发现了一个类似的问题,但唯一的答案不是很有帮助。

有什么更好的、不同的方式来做到这一点?

这是我的 cellForRowAtIndexPath 和我的 numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Return the number of rows in the section.
    //set equal to the information in the array

    return [_jsonDataArray count];
}

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

    //create Dictionary of data in row
    NSDictionary *jsoninfo = [_jsonDataArray objectAtIndex:indexPath.row];

    //get required keys from dictionary and assign to vairables
    NSString *title = [jsoninfo objectForKey:@"title"];
    NSString *subtitle = [jsoninfo objectForKey:@"subtitle"];
    NSURL *imageURL = [NSURL URLWithString:[jsoninfo objectForKey:@"series_image_URL"]];

    //download the images.
    NSData *imgData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *img = [[UIImage alloc] initWithData:imgData];


    //set boarder for custom cells... I need to have a border on the top and bottom of the cells I am creating so xcode does not autofill the empty space.



    //fill in text to cells
    cell.textLabel.text = title;
    cell.detailTextLabel.text = subtitle;
    cell.imageView.image = img;

    return cell;
}
4

5 回答 5

26

我也认为这不是最好的主意,但如果你真的想这样做,这里的代码可以实现你想要的:

tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

// Draw top border only on first cell
if (indexPath.row == 0) {
    UIView *topLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 1)];
    topLineView.backgroundColor = [UIColor grayColor];
    [cell.contentView addSubview:topLineView];
}

UIView *bottomLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.bounds.size.height, self.view.bounds.size.width, 1)];
bottomLineView.backgroundColor = [UIColor grayColor];
[cell.contentView addSubview:bottomLineView];

将此代码放入tableView:cellForRowAtIndexPath:方法中。您的最终外观UITableView将是这样的:

具有选择性边框的表格视图

考虑到这对性能不是很好,特别是如果您有很多单元格。如果您有大量数据,请参阅此 SO 问题以获取有关如何优化绘图的帮助。

于 2012-12-20T22:15:46.890 回答
1

仅在方法中尝试此tableView:cellForRowAtIndexPath:方法

[cell.contentView.layer setBorderColor:[UIColor grayColor].CGColor];
[cell.contentView.layer setBorderWidth:1.0f];
于 2014-01-07T15:44:54.077 回答
0

这听起来像是尝试将有效单元格与带有线条的空单元格“区分开来”的次优解决方案。一种更好的方法是在用它填充表之前清理数据源。

于 2012-12-20T21:46:22.603 回答
0

Use Custom Cells. Your Datasoure (Models) should drive the information into the Custom Cells. Create a setter within the Custom Cell class that can be set at each row. as in....


  1. Allocation your Custom Cell with reuse Id,

  2. Pass the property that is determing if the line should show:
    [cell setCustomLines:Model.property];

  3. return the cell;


You will have far more flexibility to design the CustomCell any way you want, Images, Lines, Colors, or other ways of letting your user's see a difference among your cells.

Technically, Marco's Answer will work, and good job on a simple solution. But you will not be able to expand this very much farther this this.

于 2012-12-21T02:14:59.283 回答
0

这不是问题的答案,而是原始问题的干净解决方案。

添加一个空的 UIView 作为 UITableView 的页脚。然后将隐藏空单元格。看到这个答案

于 2015-12-03T15:03:07.650 回答