对于选定的行,将行高设置为 0 (swift)

Posted

技术标签:

【中文标题】对于选定的行,将行高设置为 0 (swift)【英文标题】:setting a row height to 0, for selected rows (swift) 【发布时间】:2016-12-28 16:42:06 【问题描述】:

在我的应用程序中,我在 UITableView 上显示了“组”物种。

有些组是免费的,有些是应用内购买的。

应用内购买的组在cellForRowAtIndexPath 中设置了该行的挂锁UIImage。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    
        let cell: UITableViewCell       = tableView.dequeueReusableCell(withIdentifier: Resource.SpeciesCell)!

        let specieImage: UIImageView    = cell.viewWithTag(Resource.SpeciesImageTag) as! UIImageView
        let specieName: UILabel         = cell.viewWithTag(Resource.SpeciesNameTag) as! UILabel
        let specieGenus: UILabel        = cell.viewWithTag(Resource.SpeciesGenusTag) as! UILabel
        let specieFamily: UILabel       = cell.viewWithTag(Resource.SpeciesFamilyTag) as! UILabel

        specieName.text     = self.species[(indexPath as NSIndexPath).row].specie
        specieFamily.text   = ""
        specieGenus.text    =  AppDelegate.getRLDatabase().getSubGroupName_BySpecieName(specieName.text!)


        let padLock: UIImageView        = cell.viewWithTag(Resource.SpeciesCategoryLabelTag) as! UIImageView

        padLock.image = UIImage(named: "PadlockIcon")
        padLock.alpha = 0.7

        let fishesPurchased = UserDefaults.standard.bool (forKey: "ReefLife5Fishes")
        let sharksPurchased = UserDefaults.standard.bool (forKey: "ReefLife6Sharks")
        let turtlesPurchased = UserDefaults.standard.bool (forKey: "ReefLife8Turtles")
        let seahorsesPurchased = UserDefaults.standard.bool (forKey: "ReefLife9Seahorses")
        let vertebratesPurchased = UserDefaults.standard.bool (forKey: "ReefLife3Vertebrates")
        let fullPurchased = UserDefaults.standard.bool (forKey: "ReefLife1Full")

        padLock.isHidden = false
        specieImage.alpha = 1.0

        let speciesGroup = self.species[(indexPath as NSIndexPath).row].group

        if fullPurchased == true 

            padLock.isHidden = true
            specieImage.alpha = 1.0

         else if speciesGroupVertebratesArray.contains(speciesGroup) 

            if vertebratesPurchased == true 

                padLock.isHidden = true
                specieImage.alpha = 1.0

             else 

                if speciesGroup == "Fish" 
                    if fishesPurchased == true
                        padLock.isHidden = true
                        specieImage.alpha = 1.0

                     else
                        specieImage.alpha = 0.5
                    
                 else if (speciesGroup == "Sharks" || speciesGroup == "Rays" ) 
                    if sharksPurchased == true
                        padLock.isHidden = true
                        specieImage.alpha = 1.0

                     else
                        specieImage.alpha = 0.5
                    
                 else if speciesGroup == "Syngnathiformes" 
                    if seahorsesPurchased == true
                        padLock.isHidden = true
                        specieImage.alpha = 1.0

                     else
                        specieImage.alpha = 0.5
                    
                 else if speciesGroup == "Reptilia" 
                    if turtlesPurchased == true
                        padLock.isHidden = true
                        specieImage.alpha = 1.0

                     else
                        specieImage.alpha = 0.5
                    
                
            

        
 .... 

我有一个基于 UISwitch 的选项设置来“隐藏锁定的项目”

当用户选择此项时,我想隐藏锁定的组(或未购买的项目)。我认为实现这一点的最佳方法是通过将行高设置为 0 来隐藏特定的行。

我正在努力使用 indexPath.row 将行高设置为 0,因为 indexPath.row 不接受 CGFloat 命令。

建议?

编辑: 意识到我需要使用 heightForRowAt indexPath: IndexPath 函数,但我很难将它分配给 indexPath.row。

也许更好的问题是:如何设置它以便我知道哪个 indexPath.row 具有“padLock.isHidden == false”。

【问题讨论】:

【参考方案1】:

行高是在单独的委托函数中设置的,而不是在 cellForRowAt 设置函数中。试试这样的:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

    rowHeight = [your default row height]

    record = frc.object(at: indexPath) as [YourEntity]

    if record.[what indicates locked] == true
    
        rowHeight = 0
     

    return CGFloat(rowHeight)

【讨论】:

谢谢,我一直在 heightForRow 内部尝试,但您的想法比我尝试的要接近得多。以上唯一的问题是我无法弄清楚 frc 代表什么? 这就是我所说的我的 fetchedResultsController: private var frc = NSFetchedResultsController()【参考方案2】:

您可以使用方法tableView(height forRow。)

然后(用于重新加载tableView的布局), 使用方法:tableView.beginUpdates 然后是tableView.endingUpdates

【讨论】:

以上是关于对于选定的行,将行高设置为 0 (swift)的主要内容,如果未能解决你的问题,请参考以下文章

xamarin.forms以编程方式将行高设置为0会导致不需要的空间

如何设置表格中的行高以在 python-docx 中修复?

关于DataGridView控件的几个属性

通过单击 swift 中的按钮设置选定的行

无法更改 TableViewCells 的行高 - Swift [重复]

excel隐藏的行不能恢复,一行行拉的话可以,全选后再点右键取消隐藏却不行,是怎么回事?