在TableView中的自定义单元格中隐藏/显示标签

时间:2017-05-03 04:24:00

标签: ios objective-c uitableview

我在TableView中有以下单元格。

最初,我为0标签指定了高度Promotion,并将其值设为硬编码10美元。

每当用户点击Promotion按钮时,我的身高会更高,以显示Promotion及其值并指定身高30

但是,我看到的唯一变化是,单元格的高度越来越大,第一个和第二个标签之间的空间越来越大,但我无法看到promotion label

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

  static NSString *cellLastIdentifier = @"lastcell";
  LastTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellLastIdentifier];
  if (cell == nil)
       cell = [[LastTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellLastIdentifier];
   cell.subTotalLbl.text = [NSString  stringWithFormat:@"$ %.02f", subtotal ];
   cell.salesLbl.text = [NSString  stringWithFormat:@"+$ %.02f", tax ];
   if(isPromotionApplied)
   {
     cell.promotionLabelHeight.constant = 30;
     cell.promotionValueLblHeight.constant = 30;
     cell.promotionValueLbl.text = @"120";
    }
   return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(isPromotionApplied)
        return 140.0;
    else
         return 100.0;
}

- (void)applyPromoCode : (double)percent
{
   isPromotionApplied = YES;
   NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:[sharedData.orderItems count] inSection:0];
   NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
   [self.checkOutTableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationFade];
}

LastTableViewCell故事板

enter image description here

2 个答案:

答案 0 :(得分:2)

检查销售税标签应具有促销标签的垂直底部约束的约束条件,促销标签应具有自定义单元格的垂直底部约束。

现在创建一个促销标签高度约束的IBOutlet,而不是show hide将高度设置为0和20

这是一个简短的演示 https://github.com/harshalrj25/stackoverFlowAnswers

答案 1 :(得分:1)

为此,您应在标签之间设置自动布局约束,并为promotionlbl设置高度约束。

然后取出promotionlbl高度约束的出口,并初步将约束常数设置为0,当您想要显示promotionlbl时,再按照约定设置高度常数你的需要。