我有一个单元格,它有一个自定义UIView子类作为其contentView子视图之一。子类将用作标记列表。
在单元格创建方法中,我完成以下对子类的调用:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[searchResultCell.categoriesView createLabelsForArray:newCats];
调用以下方法:
-(void)createLabelsForArray:(NSArray *)labelArray {
NSLog(@"%s",__PRETTY_FUNCTION__);
for (NSString *labelTextString in labelArray) {
NSLog(@"label string : %@",labelTextString);
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:12], NSFontAttributeName,
nil];
CGRect frame = [labelTextString boundingRectWithSize:CGSizeMake(128, 15)
options:NSStringDrawingTruncatesLastVisibleLine
attributes:attributesDictionary
context:nil];
CGSize size = frame.size;
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, size.width, size.height)];
label.textColor = [UIColor blueColor];
label.text = labelTextString;
NSLog(@"label frame: %@",NSStringFromCGRect(label.frame));
[self addSubview:label];
}
NSLog(@"self frame: %@",NSStringFromCGRect(self.frame));
这是发生的事情:
虽然这是我想要实现的目标:
答案 0 :(得分:0)
您正在初始化每个新创建的标签,其框架来源为(0,0)
。这意味着您添加到categoriesView的每个标签都将相互添加。每次添加新标签时,您都需要通过当前标签的x
增加后续标签的width
位置。
其次,由于在-createLabelsForArray:
内调用了-tableView:cellForRowAtIndexPath:
,因此如果searchResultsCell.categoriesView
每次都不是新视图,则每次调用此方法时都会添加新的重复标签调用cellForRowAtIndexPath
。您可能想要在再次添加标签之前检查标签是否已添加,或者在添加新标签之前至少删除旧标签。