内部子类UITableViewCell覆盖函数布局被调用为Double的子视图



我有一个UITableViewCell的子类,它为每个单元格调用两次override func layoutSubviews()。这是在单元中创建元素的多个副本。

UITableView返回正确的单元格计数并显示正确的单元格数,但布局函数会将少数属性重置为零。因此,渲染了大量错误的数据。

UIViewController内部的TableView:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return userMatches.count    // return 2 correctly
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    return self.view.bounds.height * 0.20
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: MatchTableViewCell = self.matchTableView.dequeueReusableCellWithIdentifier("matchCell", forIndexPath: indexPath) as! MatchTableViewCell
    cell.matchDetails = userMatches[indexPath.row]
    cell.userInteractionEnabled = true
    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell // creates 2 correctly
}

UITableView子类:

   override func layoutSubviews() {
    super.layoutSubviews()
// runs 4 times
    let userHelperIconArray = [userZoom, userTakeTwo, userStopper]
    let opponentHelperIconArray = [opponentZoom, opponentTakeTwo, opponentStopper]
    layoutHelperInventoryIcons(self, opponentHelperIconArray: opponentHelperIconArray, userHelperIconArray: userHelperIconArray, opponentNameLabel: opponentName)
    layoutMiniGameboard(self)
    self.layer.borderWidth = 1.0
    self.layer.borderColor = UIColor.blackColor().CGColor
    print("one")
    turnIdentifier(self, matchDetails: matchDetails, opponentNameLabel: opponentName)
}

无论如何都不应该在layoutSubviews中执行此操作。相反,将配置移到一个单独的方法中,并让表视图数据源在取消单元格的大小后调用该配置方法。

最新更新