为了账号安全,请及时绑定邮箱和手机立即绑定

当选择UITableViewCell时,您能在UITableViewCell上动画化高度更改吗?

当选择UITableViewCell时,您能在UITableViewCell上动画化高度更改吗?

iOS
LEATH 2019-06-21 16:36:26
当选择UITableViewCell时,您能在UITableViewCell上动画化高度更改吗?我用的是UITableView在我的iPhone应用程序中,我有一个属于一个组的人的列表。我希望这样,当用户单击某个特定的人(从而选择该单元格)时,该单元格的高度将显示多个UI控件,用于编辑该用户的属性。这个是可能的吗?
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

我找到了一个非常简单的解决方案,作为对UITableView我在工作.

将单元格高度存储在通常通过tableView: heightForRowAtIndexPath:,然后,当您想要动画的高度变化,只需更改变量的值,并调用.

[tableView beginUpdates];[tableView endUpdates];

您会发现它不能完成完全的重新加载,但是对于UITableView要知道它必须重新绘制细胞,为细胞获取新的高度值.你猜怎么着?它为你激活了变化。甜。

我有一个更详细的解释和完整的代码样本在我的博客.。动画UITableView单元格高度更改


查看完整回答
反对 回复 2019-06-21
?
哔哔one

TA贡献1854条经验 获得超8个赞

我喜欢西蒙·李的回答。我实际上没有尝试过这个方法,但是看起来它会改变列表中所有单元格的大小。我只是想换个被窃听的手机。我做的有点像西蒙,但只是有点不同。这将在选定单元格时更改其外观。它确实有生命。只是另一种方法。

创建一个int来保存当前选定单元格索引的值:

int currentSelection;

然后:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    int row = [indexPath row];
    selectedNumber = row;
    [tableView beginUpdates];
    [tableView endUpdates];}

然后:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([indexPath row] == currentSelection) {
        return  80;
    }
    else return 40;}

我相信您可以在tableView:cellForRowAtIndexPath:更改单元格的类型,甚至为单元格加载XIB文件中进行类似的更改。

像这样,CurentSelections将从0开始。如果不希望列表的第一个单元格(索引0)看起来是默认选中的,则需要进行调整。


查看完整回答
反对 回复 2019-06-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

添加一个属性来跟踪所选单元格

@property (nonatomic) int currentSelection;

将其设置为一个哨位值(例如)viewDidLoad,以确保UITableView从“正常”位置开始

- (void)viewDidLoad{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //sentinel
    self.currentSelection = -1;}

在……里面heightForRowAtIndexPath可以为选定的单元格设置所需的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    int rowHeight;
    if ([indexPath row] == self.currentSelection) {
        rowHeight = self.newCellHeight;
    } else rowHeight = 57.0f;
    return rowHeight;}

在……里面didSelectRowAtIndexPath如果需要,可以保存当前选择的内容并保存动态高度。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // do things with your cell here

        // set selection
        self.currentSelection = indexPath.row;
        // save height for full text label
        self.newCellHeight = cell.titleLbl.frame.size.height + cell.descriptionLbl.frame.size.height + 10;

        // animate
        [tableView beginUpdates];
        [tableView endUpdates];
    }}

在……里面didDeselectRowAtIndexPath将选择索引设置为前哨值,并使单元格恢复正常形式。

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {       
        // do things with your cell here

        // sentinel
        self.currentSelection = -1;

        // animate
        [tableView beginUpdates];
        [tableView endUpdates];
    }}


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 707 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信