在尝试了各种选项并阅读了关于 SO 的众多答案之后,我发布了这个问题,希望有人可以提供一些见解或解决这个问题:
iOS5.1、XCode 4.4.1、故事板、ARC
我有一个“分组”表格视图,每个单元格都包含一堆标签、图像和按钮。标签之一,描述标签,它的文本可以大或小,这意味着如果文本很大,我必须相应地增加标签的大小并相应地将按钮放在下面。我能够做到这一切,但问题是当我滚动经过第一个单元格时按钮会出现两次,并在滚动时不断重复。
这是代码,我所做的只是根据文本计算标签的高度,调整标签的大小,然后将 3 个按钮相应地放置在描述标签下方。
下面的代码仅适用于一个按钮,但这应该可以让您了解我在做什么。我曾尝试在自定义单元格类中的“willDisplayCell”中做类似的事情,但当我在表格视图中向下滚动时,3 个按钮仍然重复。请参考截图,前三个按钮甚至不应该显示。
我注意到前 3 个按钮的位置与忽略sizeIncrement 相同,即“359.0f + sizeIncrement +20”减去“sizeIncrement”,“sizeIncrement”= 计算后描述标签的高度
我还注意到,如果我这样做
float y = 359.0f + 20;
而不是这个
float y = 359.0f + sizeIncrement +20;
按钮问题的重复消失了。
PS:我知道这不是最好的代码,但我一直在尝试很多东西来解决这个问题,所以此时并没有考虑最佳实践等。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"tipsid";
TipsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[TipsCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
id tip = [_tips objectAtIndex: [indexPath section]];
NSDictionary *tipForIndex = [_tips objectAtIndex: [indexPath section]];
float sizeIncrement = [Utility getLabelHeightForText:[tipForIndex objectForKey:@"tipDescripion"]
withWidth:285.0f
withFont:[UIFont systemFontOfSize:14.0f]];
// Here I Resize the Label, code below to create a button and position accordingly.
float y = 359.0f + sizeIncrement +20;
UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(10, y, 80, 26)];
likeButton.tag = [indexPath section];
// add targets and actions
[likeButton addTarget:self action:@selector(likebuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[likeButton setBackgroundImage:[UIImage imageNamed:@"likebutton.png"] forState:UIControlStateNormal];
[likeButton setImage:[UIImage imageNamed:@"likedButton.png"] forState:UIControlStateSelected];
// add to a view
[cell.contentView addSubview:likeButton];
.....类似地创建2个其他按钮