带有自定义 UIView 的 Tableview,添加标签重叠

Posted

技术标签:

【中文标题】带有自定义 UIView 的 Tableview,添加标签重叠【英文标题】:Tableview with custom UIView , adding labels overlaps 【发布时间】:2013-07-11 14:28:53 【问题描述】:

我正在尝试实现类似 ibooks 书架的功能,我使用 GSBookShelf,它非常简单直接,它将按钮添加为单元格,效果很好。

我想为每个按钮添加一些标签,我成功了,但偶尔可以说 5 次标签中有 2 次与之前的按钮标签重叠。

通常是这样的

有时会发生这种情况:

代码:

- (UIView *)bookShelfView:(GSBookShelfView *)bookShelfView bookViewAtIndex:(NSInteger)index 

    NSDictionary *currentArticle = [_bookArray objectAtIndex:index];

    static NSString *identifier = @"bookView";
    MyBookView *bookView = (MyBookView *)[bookShelfView dequeueReuseableBookViewWithIdentifier:identifier];
    if (bookView == nil) 
        bookView = [[MyBookView alloc] initWithFrame:CGRectZero];
        bookView.reuseIdentifier = identifier;
        [bookView addTarget:self action:@selector(bookViewClicked:) forControlEvents:UIControlEventTouchUpInside];

    
    [bookView setIndex:index];
    [bookView setSelected:[(NSNumber *)[_bookStatus objectAtIndex:index] intValue]];
    //[bookView setFileName:[currentArticle objectForKey:@"name"] ];
    //[bookView setFileName:[currentArticle objectForKey:@"name"] :index];

    UIImage *image = nil;
    image = [self returnCellImagefor:[currentArticle objectForKey:@"imagename"]];
    [bookView setBackgroundImage:image forState:UIControlStateNormal];

    UILabel *_fileLabel=nil;
    _fileLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 180, 200, 46)];
    _fileLabel.text=[currentArticle objectForKey:@"name"];
    _fileLabel.textColor=[UIColor whiteColor];
    _fileLabel.backgroundColor=[UIColor clearColor];
    _fileLabel.font = [UIFont fontWithName:@"Gill Sans" size:16];
    //_fileLabel.textAlignment=UITextAlignmentCenter;
    _fileLabel.textAlignment = NSTextAlignmentCenter;
    _fileLabel.numberOfLines=0;
    _fileLabel.lineBreakMode = UILineBreakModeWordWrap;
    [_fileLabel sizeToFit];
    [bookView addSubview:_fileLabel];

    return bookView;

图像很好,它们从不重叠,但标签有时会重叠。

知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

你把 bookShelfView 功能放在哪里了?显示您的 TableView 代码。我敢打赌,您遇到的问题是,当您在表中向下滚动时 bookShelfView 再次被调用。您的标签为两个不同的值创建了两次。

这是你看到重叠发生的唯一方式,这是一遍又一遍地启动

_fileLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 180, 200, 46)];

我会检查您的 TableView 代码。我之前也问过类似的问题。 (不准确)。看看UITableView and UILabel repeating

【讨论】:

谢谢,我每次在分配新标签之前都标记了每个标签并将其从超级视图中删除

以上是关于带有自定义 UIView 的 Tableview,添加标签重叠的主要内容,如果未能解决你的问题,请参考以下文章

自定义表头部分

如何在tableview上方隐藏自定义视图

在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview

自定义 UITableViewCell 显示不正确的值

UITableView上方的自定义UIView(用户拉动刷新时)

带有 UIView 子类的 UITableViewCell 在单元格上创建多个图层