如何将uilabel高度设置为0或uitbleviewcell高度为0?

时间:2015-12-23 05:51:03

标签: ios swift uitableview uilabel ios9

我有一个这样的页面 all values are in UIlabel

现在,如果我得到任何值nil,我会隐藏该标签

问题:

但是,当我隐藏该标签时,它显示空白

showing blank space

这是mycode ::

 let dic = finalcarexpense.objectAtIndex(indexPath.row) as! NSDictionary
    if lastcruisebool == true
    {
        cell.lblcruisecontroll.text = (dic["cruise_control"] as? String)!
    }
    else
    {

        cell.lblcruisecontroll.hidden = true
        cell.placecruisecontrol.hidden = true
    }



    if lastremotebool == true
    {
        cell.lblremotecentrallocking.text = (dic["remote_central_locking"] as? String)!
    }
    else
    {
        cell.lblremotecentrallocking.hidden = true
        cell.placeremotecentrallocking.hidden = true
    }


    if lastacbool == true
    {
        cell.lblairconditioning.text = (dic["air_conditioning"] as? String)!
    }
    else
    {
        cell.lblairconditioning.hidden = true
        cell.placeac.hidden = true
    }


    if lastbluetoothbool == true
    {
        cell.lblbluetooth.text = (dic["bluetooth"] as? String)!
    }
    else
    {
        cell.lblbluetooth.hidden = true
        cell.placebluetooth.hidden = true
    }


    if lastradiocdbool == true
    {
        cell.lblradiocd.text = (dic["radio_cd"] as? String)!
    }
    else
    {

        cell.lblradiocd.hidden = true
        cell.placeradiocd.hidden = true
    }


    if lastpowerbool == true
    {
        cell.lblpowersteering.text = (dic["power_steering"] as? String)!
    }
    else
    {
        cell.lblpowersteering.hidden = true
    }

所以有任何解决方案,我应该设置UILabel hieght 0 ??或者我应该使用UITableViewCell ??

来做到这一点

5 个答案:

答案 0 :(得分:1)

您不应该有单个单元格来容纳要显示的所有行/项目。如果您有这样的话,则很难管理标签之间的空白区域。

即使您将标签的值设置为nil,也必须调整标签之间的垂直间距约束。这是一个复杂的问题。

最好采用以下方法。

  1. 清除UITableView分隔符颜色

  2. 每行/单元格应重用单个原型单元格。 1个单元格。

  3. 使用UITableViewDelegate的方法

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        If(indexPath.row should be should not be shown){
             return 0;//for hiding the row
        }
        return Default Height Of row;
    
    }
    

    我希望将来会有人利用它。

答案 1 :(得分:1)

为所有标签添加高度约束,将Outlet拖动到约束,如下所示: enter image description here

然后,如果您从服务器设置高度约束响应为零,则为0,如下所示:

 nsLcHeightForLabel.constant = 0

答案 2 :(得分:1)

您可以给出uilabel高度约束,并且可以在运行时设置为0。你也可以将它设置为0,这样就不可见了 感谢

答案 3 :(得分:0)

最好的解决方案是使用表格更改您的架构。实际上,您应该更改单元格的数量。您需要在模型中存储数据,它甚至可能是一个数组,您的表应该是数据的显示,如果不需要单元格,则将其从模型中删除并重新加载表。为此,您需要对单元格使用Dynamic Prototypes,并使用此方法:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return yourDataModel.count
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 100
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("YourCell", forIndexPath: indexPath) as! YourCellController
    return cell
}

阅读本教程A similar issue was documented here.,以便更好地了解如何操作

答案 4 :(得分:0)

可以制作一个解决方案(使用NSLayoutConstraint的常量属性)IBOutlet连接所有标签的高度并将其高度设置为零。这将删除你的间距。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;

离。 lblairconditioningCostraintHeight.constant = 0

enter image description here

检查地址字段的高度高度约束。我为此制作了IBOutlet,如果地址很大,它会自动推送所有标签,反之亦然。

并在cellForRowAtIndexPath方法中设置标签高度ZERO,如果label.hope中没有文本可以帮助您。