ios 7 uitableviewcell 绘图更改

Posted

技术标签:

【中文标题】ios 7 uitableviewcell 绘图更改【英文标题】:ios 7 uitableviewcell drawing changes 【发布时间】:2013-09-24 09:39:23 【问题描述】:

我在 ios 7 上遇到了自定义单元格绘图的问题(在 iOS 6 和 5 上工作正常)。

在 heightForRowAtIndexPath 上,我返回的高度小于每个部分最后一行的单元格实际高度,因为我需要最后一个单元格与下一部分的标题重叠。

Apple 似乎在 iOS 7 上进行了绘图改进或其他操作,因为只有从 heightForRowAtIndexPath 返回的高度正在绘制,所以我的单元格将在底部被切割。

任何想法都会受到赞赏。

【问题讨论】:

【参考方案1】:

嗯,这就是我会做的......

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    if (indexPath.row == [_array_todo count]) 
        // last row
        return 50;
    else
        // not the last row
        return 80;
    

还要考虑当单元格被选中时你在做什么......

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    sel_path = indexPath;
    [self.tableView beginUpdates];
    [self.tableView endUpdates];

【讨论】:

我在 iOS 7 之前的 heightForRowAtIndexPath 中做了同样的事情,但在 iOS 7 上无法正常工作。如果最后一行返回 50,则只会绘制 50 px 的高度,因此不会显示单元格的底部。 您是否尝试过对 Cell 进行子类化并使用 -(bool)setSelected 方法?您可以在未选择单元格时隐藏并在选择单元格时再次显示... 就像我之前说的,我已经有一个自定义单元格并且该单元格不可选择,您无法点击它。【参考方案2】:

我遇到了同样的问题和情况(点击高度较低的最后一个单元格以添加更多数据)。我没有研究为什么会发生这种情况,但有些东西对我有用。我使用了来自 NSDictionary 的表格数据。它适用于 iOS6.1 及更早版本。在 iOS7 中,它导致了与您相同的错误。在 viewDidLoad 中将数据分配到单独的 NSMutableArray 解决了这个问题。所以不要在 tableview 委托方法中到处使用

[self.data objectForKey:@"offers"]

我做到了

- (void)viewDidLoad 
    [super viewDidLoad];
    if (!tableData) tableData = [[NSMutableArray alloc] initWithArray:[self.data objectForKey:@"offers"]];

然后全部替换。希望对你也有帮助。

【讨论】:

以上是关于ios 7 uitableviewcell 绘图更改的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 - 我可以更改 UITableViewCell 中的删除按钮背景颜色吗?

如何在iOS 7上的UITableViewCell左侧获得复选标记,就像在设置中一样?

iOS 7 UITableViewCell 剪辑暂时

iOS 7 UITableViewCell 自动布局

iOS 7 中具有 UITextView 高度的 UITableViewCell?

以编程方式为 UITableViewCell 设置 LayoutMargins - iOS 7 替代方案