调整视图的大小会使其他视图在 UITableViewCell 中反弹

Posted

技术标签:

【中文标题】调整视图的大小会使其他视图在 UITableViewCell 中反弹【英文标题】:Resizing a View makes other views to bounce in UITableViewCell 【发布时间】:2020-04-15 07:11:45 【问题描述】:

我需要展开或折叠表格视图单元格及其内容。 为此,我正在使用 NSLayoutConstraints。虽然它完成了工作,但我在单元格中的其他视图中遇到了一些令人讨厌的布局问题。Here is a video.这是我的代码:

视图控制器:

extension ViewController: TableViewCellDelegate 
    func tableView(shouldExpand cell: TableViewCell) 
        tableView.performBatchUpdates(
            cell.expand()
        )
    

    func tableView(shouldCollapse cell: TableViewCell) 
        tableView.performBatchUpdates(
            cell.collapse()
        )
    

TableViewCell:

func expand() 
    UIView.animate(withDuration: 0.57) 
        self.viewHeight.constant = 320
        self.view.alpha = 1
        self.layoutIfNeeded()
    


func collapse() 
    UIView.animate(withDuration: 0.57) 
        self.viewHeight.constant = 0
        self.view.alpha = 0
        self.layoutIfNeeded()
    

如何停止上视图停止调整大小?

【问题讨论】:

【参考方案1】:

您可以使用 UIStackView 并仅显示和隐藏视图以进行折叠和展开。 UIStackView 将很容易处理并且会为您工作。

【讨论】:

你的意思是把上视图和下视图都放在一个堆栈视图中吗?我绝对可以试试。谢谢!!【参考方案2】:

performBatchUpdates 用于根据数据源的变化对tableView 的变化进行动画处理。由于您没有对数据源进行任何更改,因此无需在 tableView.performBatchUpdates 块内进行动画处理。不用performBatchUpdates 试试。

func tableView(shouldExpand cell: TableViewCell) 
     cell.expand()


func tableView(shouldCollapse cell: TableViewCell) 
     cell.collapse()

【讨论】:

您好@Jithin,感谢您的回复。我试图在块外运行代码。但是该表不会以这种方式更新。 alpha 值会发生变化,但高度约束不会更新,单元格本身也不会。 :( ***.com/questions/59280032/… @KoushikMudi 你可以试试这个答案,它也会扩大表格,请看那个截图。希望对你有帮助。 @VipinPareek 感谢您的评论。您的代码显然可以工作,但这不会为单元格的帧更改设置动画。调用perfornBatchUpdates 时,表格视图会显示其子视图。在我的视频中,向上的部分需要进行一些修改,因为嵌套在其中的堆栈视图正在失去其实际高度。

以上是关于调整视图的大小会使其他视图在 UITableViewCell 中反弹的主要内容,如果未能解决你的问题,请参考以下文章

动态调整视图大小 osx

当我尝试在 Xcode 6.1 中调整情节提要中其他视图的大小时,为啥某些视图的框架变为 (0,0,0,0)

调整视图大小的任何其他方法,除了自动布局

UITableViewAutomaticDimension 单元格在滚动或拉动刷新后调整大小

如何设置自动布局,以便 UILabel 调整大小并根据需要移动其他视图

iOS UIView drawRect 调整大小动画