内容视图调整大小到父滚动视图

时间:2017-04-12 10:57:05

标签: swift3 uiscrollview

我的滚动视图包含大量组件的内容视图,并且组件在单击时动画。有一个问题,内容视图不会正确地改变大小。有没有人知道如何解决这个问题?在滚动其后面的contnent视图的大小时。这是一个描述我正在做的事情的代码:

 func updateDropDownList(tableView: UITableView, height: CGFloat, state: CGFloat) {
        let rowHeight = tableView.rowHeight
        UIView.animate(withDuration: 0.3, animations: {
            var frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.width, height: height)
            tableView.frame = frame
            if state == -1 {
                frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.width, height: CGFloat(tableView.numberOfRows(inSection: 0)) * rowHeight)
            }
            self.updatePositions(tableView: tableView, frame: frame, state: state, rowHeight: rowHeight)
        })
    }

陈述:

  1. state = 1 //调整表格视图
  2. state = -1 //回到原始大小
  3. 允许我改变每个组件位置的方法:

    func updatePositions(tableView: UITableView, frame: CGRect, state: CGFloat, rowHeight: CGFloat) {
            switch tableView {
            case facilitiesTableView:
                statusLabel.frame.origin.y += state * (frame.height - rowHeight)
                statusTableView.frame.origin.y += state * (frame.height - rowHeight)
                serviceTableView.frame.origin.y += state * (frame.height - rowHeight)
                vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight)
                colorsCollection.frame.origin.y += state * (frame.height - rowHeight)
                scrollView.contentSize.height += state * colorsCollection.frame.height
    //            contentView.frame.size = CGSize(width: contentView.frame.size.width, height: scrollView.contentSize.height)
            case statusTableView:
                serviceTableView.frame.origin.y += state * (frame.height - rowHeight)
                vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight)
                colorsCollection.frame.origin.y += state * (frame.height - rowHeight)
                scrollView.contentSize.height += state * colorsCollection.frame.height
            case serviceTableView:
                vehiclesCollection.frame.origin.y += state * (frame.height - rowHeight)
                colorsCollection.frame.origin.y += state * (frame.height - rowHeight)
                scrollView.contentSize.height += state * colorsCollection.frame.height
            default:
                break
            }
        }
    

    有一条注释行可以调整内容视图的大小,但是当我调用它会弄乱我的屏幕时,点击的表格不会调整内容视图,因为如果我没有错误,这些组件会重新绘制它们。 / p>

    如果没有调整大小的视图以适应滚动视图,我无法点击最低的组件,因为它们超出了内容视图的范围。

    先谢谢!

1 个答案:

答案 0 :(得分:0)

在我的观察中,由于约束不会随着动画的发生而更新,因此会出现这些问题。 尝试在动画完成之前和之后添加以下代码行

contentView.layoutIfNeeded()

这一小段代码在很多场合帮助了我。希望它适合你!