如何防止表格单元边框被单元格图像切割?

时间:2013-10-07 10:01:40

标签: ios objective-c uitableview

我有一个表视图,我想通过使用以下代码在其上添加图像

首先覆盖layoutSubviews

- (void)layoutSubviews{
    [super layoutSubviews];
self.imageView.frame = CGRectMake(15, 5, 50, 45);
self.imageView.layer.cornerRadius = 5.0f;
self.imageView.layer.masksToBounds = YES;
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
}

然后在-(MyTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

中使用它
 NSString *imageUrlString = [userInfoResponse[indexPath.row - beginIndex] objectForKey:@"image_url"];
        NSURL * imageURL = [NSURL URLWithString:imageUrlString];
        if ( [[NSUserDefaults standardUserDefaults] objectForKey:imageUrlString] == nil ) {
            [[NSUserDefaults standardUserDefaults] setObject:[NSData dataWithContentsOfURL:imageURL] forKey:imageUrlString];
        }
        UIImage * img = [UIImage imageWithData:[[NSUserDefaults standardUserDefaults] objectForKey:imageUrlString]];
        cell.imageView.image = img;
}

在这一行我添加了

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 55.0;
}

它可以解决这个小问题(见附图)。我不希望单元边框线被图像中断。

enter image description here

我试过玩代码,但它不会有帮助。谁知道答案?请帮忙。感谢

注意:它适用于iOS 6,此屏幕截图位于iOS 7上。它可以是iOS 7 UITableView的新设置吗?

5 个答案:

答案 0 :(得分:11)

转到表格视图控制器并将这些代码放入viewDidLoad:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) //should check version to prevent force closed
{
    self.tableView.separatorInset = UIEdgeInsetsZero;
}

答案 1 :(得分:1)

如果您不想调整UITableViewCell的高度,请在cellForRowAtIndexPath内使用:

[cell clipsToBounds:YES];

答案 2 :(得分:1)

以上答案都没有完全延伸整个屏幕的边框。实现此目的的唯一方法是在ViewController中粘贴下面的代码:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
  if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
    [cell setSeparatorInset:UIEdgeInsetsZero];
  }

  if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    [cell setLayoutMargins:UIEdgeInsetsZero];
  }
}

-(void)viewDidLayoutSubviews {
  if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    [self.tableView setSeparatorInset:UIEdgeInsetsZero];
  }

  if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [self.tableView setLayoutMargins:UIEdgeInsetsZero];
  }
}

答案 3 :(得分:0)

您的表格查看单元格太小。在控制器中实现此方法并调整单元格的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 60.0;
}

答案 4 :(得分:0)

在viewDidLoad中:

[self.tableView setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0)];