如何动态地将子视图添加到tableview单元格

时间:2015-10-01 03:45:22

标签: ios objective-c iphone uitableview tableviewcell

我在IB中创建了一个自定义的tableview单元格。我添加一个滚动视图作为单元格的contentView的子视图,并在tableview单元子类中创建IBOutlet,并进行连接。我的问题是,我想动态地向细胞添加子视图,但是当我在代码中执行此操作时,没有任何反应。单元格成功渲染,但scrollView没有显示任何内容(没有子视图)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // deque the cell
    // create some label depending on the MODEL object
    // (this is done by code, not in IB. because the label is content-based)
    // we don't know how many labels in advance
    [cell.scrollView addSubview: label];  // not working !!
    ...
    return cell;
}

但是如果我在IB中添加子视图(这意味着子视图是预定义的),它就可以工作。

有没有办法动态地将子视图添加到单元格?或者我可能把代码放在错误的地方?

3 个答案:

答案 0 :(得分:2)

感谢所有回复。

这真是令人尴尬。问题是我错误配置了标签属性,使标签文本颜色变白,但不知何故,scrollView背景也是白色的。所以我看不到标签,但实际上它们已经存在了。

所有回复都很有帮助,但是@ Shebin的答案给了我一个检查颜色的提示,所以我认为我应该把他的答案标记为最好。

答案 1 :(得分:0)

您需要在子视图上添加适当的约束。 UIScrollView的可滚动大小是根据其子视图的约束计算的。请确保正确添加对单元格内容视图的约束。

如果您没有像标签等那样在子视图上设置约束,那么会使用intrinsicContentSize

答案 2 :(得分:0)

试试这个

UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(8, 8, 130, 30)];
label1.text = @"any text";
label1.textColor = [UIColor redColor];
label1.backgroundColor = [UIColor greenColor];
[cell addSubview:label1];// first try adding to cell

如果您需要添加为cell.scrollView

的子视图
NSLog(@"scrollView %@",cell.scrollView);//it should not be nil

检查scrollView内容大小和框架

对于动态字符串,这也可以帮助您

NSString *string = @"This is the text";
CGSize stringsize = [string sizeWithFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(8, 8, stringsize.width+30/*you have to adjust 30 as u required*/, 30)];
label1.text = string;
label1.textColor = [UIColor redColor];
label1.backgroundColor = [UIColor greenColor];
cell.scrollView.contentSize = CGSizeMake(label1.frame.size.width+30/*you have to adjust 30 as u required*/, label1.frame.size.height);
[cell.scrollView addSubview:label1];