0

在此处输入图像描述

所以我UITableView有一个标题,UIImageView如图所示,以及图像下方的注释。我正在尝试增加图像和评论表之间的空间。

我已经尝试增加标题的高度,但在我的情况下它不起作用,因为它会导致更大UIImageView并且图像不会完全覆盖视图

我尝试了这个黑客:

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

    Comment *comment = [self.comments objectAtIndex:indexPath.row];
    [cell setUsername:comment.handle andText:comment.text];

    /* Dirty hack: 
     1. We cannot increase the height of the header because that will leave spaces in the image. 
     2. The only way we can increase the margin from the comments table to the picture is by 
     increasing the individual inset of the first and last comments cell 
     */
    if (indexPath.row == 0) {
        [cell setContentInset:UIEdgeInsetsMake(COMMENTS_PADDING * 10 , 0, 0, 0)];
    } else if (indexPath.row == [self.comments count] - 1) {
        [cell setContentInset:UIEdgeInsetsMake(0, 0, COMMENTS_PADDING * 10 , 0)];
    }

    return cell;
}

在我的CommentsCell.m中:

- (void)awakeFromNib {
    self.commentText.scrollEnabled = false;
    self.commentText.editable = false;
    self.commentText.contentInset = UIEdgeInsetsMake(-1 * COMMENTS_PADDING, 0, 0, 0);
}

- (void)setUsername:(NSString *)username andText:(NSString *)text {
    [self.commentText setAttributedText:[CommentsCell getContentStringForUsername:username andText:text]];
}

- (void)setContentInset:(UIEdgeInsets)inset {
    self.commentText.contentInset = inset;
}

但第一条评论仍然有相同的插图。我检查了调试器,并且 awakeFromNib 之前发生 cellForRowAtIndexPath。你明白为什么我的方法不起作用了吗?

我也愿意接受其他建议。

4

2 回答 2

2

您应该能够在您显示的图像下方的标题视图中添加一些空间。与其将表格的标题视图设置为 UIImageView,不如创建一个容器视图,您可以将图像视图添加到其中,然后在其下方留出一些空间。

- (UIView *) buildTableHeaderView {

    UIImage *image = [UIImage imageNamed: @"my_image.png"];
    CGFloat height = image.size.height + 20;

    UIImageView *imageView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, self.myTableView.frame.size.width, height)];
    [imageView setImage: image];

    UIView *headerView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.myTableView.bounds.size.width, height)];
    [headerView addSubview: imageView];

    return headerView;
}
于 2013-05-22T20:18:55.273 回答
1

你可以做的是创建一个自定义 UIView(如果你想更容易的 UI 设计,使用 .xib)在底部有一个空格并从 的- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section方法返回它UITableViewDelegate,也不要忘记通过实现返回标题视图的高度方法- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section同上。UITableViewDelegate

这是一个简短的例子:

-UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    YourCustomHeaderView *headerView = [YourCustomHeaderView instantiateView]; //static method (you can rename it) that will load the custom view from a .xib
     //do aditional UI setup or not
    return headerView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
      return DEFAULT_HEADER_HEIGHT; //a defined value 
}

如果您有单个标题视图,那么您应该使用相同的自定义标题视图创建/初始化/设置,但将您的表格向下移动到超级视图中,并在您喜欢的任何位置的顶部添加自定义标题视图。

于 2013-05-22T20:02:06.460 回答