我正在尝试使用数组中的数据填充Tableview。我正在尝试制作一个自定义表格视图单元格,其中包含一个大方形图像,宽度与屏幕相同,高度也应与屏幕宽度相同。在图像下我想添加一个文本标签。 (您可以将其视为Instagram的非常糟糕的副本)
但是,tableview仅显示空标准单元格。
这是我的自定义单元格代码:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
customImageView.contentMode = UIViewContentModeScaleAspectFit;
CGRect frame;
frame.origin.x=0;
frame.origin.y=0;
frame.size.width=self.frame.size.width;
frame.size.height=self.frame.size.width;
customImageView.frame=frame;
[customTextLabel sizeToFit];
frame.origin = CGPointMake(0, (self.frame.size.width+1));
customTextLabel.frame = frame;
customTextLabel.numberOfLines = 0;
customTextLabel.lineBreakMode = NSLineBreakByCharWrapping;
[self.contentView addSubview:customImageView];
[self.contentView addSubview:customTextLabel];
[self.contentView sizeToFit]; } return self;}
和tableview中的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyCellIdentifier = @"MyCellIdentifier";
//UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
FeedTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
if(cell == nil) {
cell = [[FeedTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier];
}
if(!emptyTable){
Log *log = [self.feedPosts objectAtIndex:indexPath.section];
cell.customImageView.image = [self loadImage:(int)log.logID];
cell.customTextLabel.text = log.logDescription;
}
return cell;}
答案 0 :(得分:0)
更好的解决方案是使用约束
为您的高度宽度创建出口(控制将约束拖到单元格类别)
在
细胞
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewCell
cell.heightConstraint.constant = UIScreen .mainScreen().bounds.height;
cell.widthConstraint.constant = UIScreen.mainScreen().bounds.width;
return cell
}
不要忘记设置行的高度
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UIScreen .mainScreen().bounds.height;
}
此外,如果需要,可以通过编程方式在代码上重新创建
希望这有帮助
答案 1 :(得分:0)
你在哪里为cell.customImageView和cell.customTextLabel分配内存?这个问题应该是由于没有生成customeImageView和customeTextLabel引起的。你应该按照下面的代码来修改:
//Setter/Getter
//allocate memory and init customImageView/customTextLable
- (UIImageView *)customeImageView{
if(!_ customImageView)_customImageView = [UIImageView new];
return _customImageView;
}
- (UILable *)customTextLabel{
if(!_customTextLable) _customTextLabel = [UIlable new];
return _cusomTextLable;
}
然后在initWithStyle:reuseIdentifier:
时调用它们。另一件应该注意的是tableView应该按照实现tableView:heightForRowAtIndexPath:
答案 2 :(得分:0)
我几乎做了DarkHorse所说的。
我忘记了:
customImageView = [[UIImageView alloc] init];
customTextLabel = [[UILabel alloc] init];
然后在
中设置高度的tableView:heightForRowAtIndexPath