Swift:UITableView在滚动时递增layoutSubviews()

时间:2015-02-26 20:54:42

标签: ios xcode uitableview swift

我在Swift中有一个包含自定义单元格的表格视图,其中包含水平布局UIView。我注意到在水平视图中滚动正确定位的子视图时会开始相乘。我猜这与在表滚动时调用layoutSubviews()有关,而事实tableview在隐藏时会回收它的单元格并在需要时显示它们,但忽略当前定位的子视图。

它看起来像这样

enter image description here

之前已经有类似的问题,但它没有好的答案。

UIScrollview calling superviews layoutSubviews when scrolling?

这是我在我的自定义单元格中使用的代码,用于水平定位:

class HorizontalLayout: UIView {

    var xOffsets: [CGFloat] = []

    override func layoutSubviews() {

        var width: CGFloat = 0

        for i in 0..<subviews.count {
            var view = subviews[i] as UIView
            view.layoutSubviews()
            width += xOffsets[i]
            view.frame.origin.x = width
            width += view.frame.width
        }
        self.frame.size.width = width

    }

    override func addSubview(view: UIView) {
        xOffsets.append(view.frame.origin.x)
        super.addSubview(view)
    }

    func removeAll() {
        for view in subviews {
            view.removeFromSuperview()
        }
        xOffsets.removeAll(keepCapacity: false)
    }

}

从这里采取:https://medium.com/swift-programming/dynamic-layouts-in-swift-b56cf8049b08

使用内部自定义单元格如下:

func loadStops(stops:[String]) {
    for stop in stops {
        // just testing purposes only
        let view = UIView(frame: CGRectMake(10, 0, 40, 40)) 
        view.backgroundColor = UIColor.redColor()
        stopsView.addSubview(view)
    }
}

有没有办法解决这个问题,防止子视图在滚动时成倍增加,也许是在子视图单元格中水平定位子视图的更好方法?

0 个答案:

没有答案