Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:UITableView在滚动时增加layoutSubviews()_Ios_Xcode_Uitableview_Swift - Fatal编程技术网

Ios Swift:UITableView在滚动时增加layoutSubviews()

Ios Swift:UITableView在滚动时增加layoutSubviews(),ios,xcode,uitableview,swift,Ios,Xcode,Uitableview,Swift,我有一个Swift中带有自定义单元格的表视图,其中包含一个水平布局视图。我注意到,在水平视图中滚动正确定位的子视图时,子视图开始成倍增加。我想这与在表格滚动时调用layoutSubviews()有关,而事实上tableview在隐藏时回收其单元格,并在需要时显示它们,但忽略当前定位的子视图 看起来像这样 以前已经有一个类似的问题,但没有好的答案 下面是我在自定义单元格中用于水平定位的代码: class HorizontalLayout: UIView { var xOffsets:

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

看起来像这样

以前已经有一个类似的问题,但没有好的答案

下面是我在自定义单元格中用于水平定位的代码:

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)
    }

}
有没有办法解决这个问题,防止滚动时子视图成倍增加,或者有更好的办法在tableview单元格中水平放置子视图

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)
    }
}