0

我有一个UITableView高度可变的单元格。我宁愿不必使用背景图像,而是想backgroundView用我想要的样式设置 a 。目前,我无法弄清楚如何backgroundView根据单元格的高度动态改变我的高度。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 300, 60)];
        view.backgroundColor = [UIColor whiteColor];
        view.layer.cornerRadius = 2.0;
        view.layer.shadowColor = [UIColor blackColor].CGColor;
        view.layer.shadowOffset = CGSizeMake(0, 1);
        view.layer.shadowRadius = 0.4;
        view.layer.shadowOpacity = 0.2;
        [cell.contentView addSubview:view];
        [cell.contentView sendSubviewToBack:view];

    }

    ZSSLog *log = [self.items objectAtIndex:indexPath.row];
    cell.textLabel.text = log.logText;
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:15.0];
    cell.textLabel.textColor = [UIColor grayColor];

    return cell;
}

现在背景视图只是重叠,因为它们没有被调整大小:

在此处输入图像描述

这可能吗?

4

2 回答 2

1

而不是设置背景视图的框架,您可能想要执行类似的操作

UIView *view = [[UIView alloc] initWithFrame:cell.contentView.bounds];
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

这个答案假设您没有使用自动布局,因为您正在设置背景视图的框架。如果您使用自动布局,则根本不想设置框架,而是在背景视图上设置约束。

于 2013-05-29T16:06:10.830 回答
0

通常,您会为此使用该backgroundView属性。尝试像这样设置背景视图:

UIView *view = [[UIView alloc] initWithFrame:cell.bounds];
view.frame = UIEdgeInsetsInsetRect(view.frame, UIEdgeInsetsMake(0, 10, 0, 10));
view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
//...other cell config...
cell.backgroundView = view;

但是如果你真的想把这个视图放在里面contentView,你可以这样做:

UIView *view = [[UIView alloc] initWithFrame:cell.contentView.bounds];
view.frame = UIEdgeInsetsInsetRect(view.frame, UIEdgeInsetsMake(0, 10, 0, 10));
view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
//...other cell config...
[cell.contentView addSubview:view];
于 2013-05-29T16:14:08.917 回答