【问题标题】:Adjust UITableViewCell height on delete swipe在删除滑动时调整 UITableViewCell 高度
【发布时间】:2013-04-26 14:03:24
【问题描述】:

我有一个UITableViewCell,它具有基于文本内容的动态高度。在tableview:heightForRowAtIndexPath: 中计算高度。这很好用。

当单元格使用editingStyle UITableViewCellEditingStyleDelete 进入编辑模式时,它会稍微缩进单元格并且可以将内容推出一些导致rowHeight 改变的内容。同样,这很有效,因为将 tableview 切换到编辑会导致 table 重新布局,因此 rowHeight 会重新计算。

当您单击红色按钮或滑动单元格时,单元格右侧会出现一个删除按钮。然而,这不会触发表格的重新布局,只会触发单元格本身。这里的问题是,如果内容超出底部边缘,则单元格不会调整大小。

有没有办法在删除按钮出现时触发表格的重新布局?

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:

    一般情况下,UITableViewCell的高度只能通过tableview:heightForRowAtIndexPath:设置,而后一种方法只能在tableView:cellForRowAtIndexPath:之前调用一次(每行每节),所以要调整必须[tableview reloadData] UITableViewCell 高度。

    也许你可以在这些委托方法中做点什么

    // The willBegin/didEnd methods are called whenever the 'editing' property is automatically changed by the table (allowing insert/delete/move). This is done by a swipe activating a single row
    - (void)tableView:(UITableView*)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;
    - (void)tableView:(UITableView*)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath; 
    

    对于您的问题,您可以在自定义 UITableViewCell 中重置 - (void)layoutSubviews 处的文本控件的属性。

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        CGFloat theWidth = self.frame.size.height; //changed when entering the edit style
        ...
    }
    

    希望这些对您有所帮助。

    【讨论】:

    • [will/didBeginEditingRowAtIndexPath] 仅在幻灯片上触发,如果您按下红色按钮则不会触发。我确实发现 willTransitionToState 可以用来检测变化。不幸的是,如果在这些方法中调用 [reloadData] 会导致无限循环。我想我可以把它放在计时器上,但感觉很不对。
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2010-11-03
    • 2011-03-19
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多