将heightForRowAth indexPath设置为多行为0

时间:2018-06-08 06:01:30

标签: swift uitableview swift3 tableview heightforrowatindexpath

我有一个整数数组,我试图将数组中所有行的UITableViewCell高度设置为50,其余行设置为0。 使用Swift 3,我的数组返回[0,1,3,6],我使用for循环遍历数组中的所有元素。

在我的heightForRowAt indexPath函数中,我将indexPath.row与这些值进行比较并正确设置高度。但是,它只适用于第一个元素,而不是全部。

只需输入代码:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if isSearching == true{
        searchBarIndexs.sorted(by: {$0 < $1})
        for allvalues in searchBarIndexs{
            if indexPath.row == allvalues{
                return 52
            } else {
                return 0
            }
        }
    } else {
        return 52
    }
    return 52
}

  override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if isSearching{
            return searchBarIndexs.count
        } else {
            return usernames.count
        }

    }




override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! usersProfileTableViewCell
            cell.userUsernameLabel.text = usernames[indexPath.row]
            cell.userIdLabel.text = userIDs[indexPath.row]

            self.allimages[indexPath.row].getDataInBackground { (data,error) in
                if let imageData = data {
                    if let downloadedImage = UIImage(data: imageData){
                        cell.profileImage.image = downloadedImage

                    }
                }
            }

        return cell
    }

我缺少什么逻辑,以便为数组中的所有元素设置适当的高度而不仅仅是第一个?我尝试过使用indexPath.contains的其他方法,但无济于事。

1 个答案:

答案 0 :(得分:3)

不要循环。只需检查当前的indexPath

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if isSearching {
        return searchBarIndexs.contains(indexPath.row) ? 52 : 0
    } else {
        return 52
    }
}