UILabel获得底部空间约束 - 自动布局

时间:2015-12-10 05:15:31

标签: ios objective-c uitableview autolayout

我在UITableView中有多个原型单元格。现在,在其中一个单元格中,我有一个带有top,“底部”,leadingtrailing约束的UILabel。我希望以编程方式修改bottom约束。如何在代码中评估此约束?

我在identifier中给了xib这个约束,但是当我做lbl.constraints时,我得到了以下约束的数组:

 po lbl.constraints
<__NSArrayI 0x7f987fb81a60>(
<NSContentSizeLayoutConstraint:0x7f987faca450 H:[UILabel:0x7f98815f4660'Schedule Showing'(117)] Hug:251 CompressionResistance:750>,
<NSContentSizeLayoutConstraint:0x7f987faca4b0 V:[UILabel:0x7f98815f4660'Schedule Showing'(16.5)] Hug:251 CompressionResistance:750>
)

为什么这不显示尾随,领先,底部和顶部约束?我哪里出错了?我该如何解决这个问题?

编辑(未反映约束更改)

-(IBAction)btnShowCtrl_click:(id)sender{
    FormTableViewCell *cell = (FormTableViewCell *)[_tblView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:[[dictData valueForKey:@"FeatureList"] count]+4]];

    if(cell.nlcTextField.priority == 999){
        cell.nlcLabel .priority = 999;
        cell.nlcTextField.priority = 500;
    } else {
        cell.nlcLabel .priority = 500;
        cell.nlcTextField.priority = 999;
    }

    [UIView animateWithDuration:.5 animations:^{
//        self.orangeView.alpha = 0;
        [_tblView beginUpdates];
        [_tblView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:[[dictData valueForKey:@"FeatureList"] count]+4]] withRowAnimation:UITableViewRowAnimationNone];
        [_tblView endUpdates];
        [cell layoutIfNeeded];
    }];
}

2 个答案:

答案 0 :(得分:1)

我建议为您的单元格创建一个Symfony子类。例如,如果您只有一个标签,并且您想要一个底部约束的出口,它可能看起来像:

{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}

UITableViewCell

然后,将其指定为原型的基类:

enter image description here

然后,您不仅可以连接标签的出口,还可以连接底部约束:

enter image description here

然后在// CustomCell.h #import <UIKit/UIKit.h> @interface CustomCell : UITableViewCell @property (weak, nonatomic) IBOutlet UILabel *customLabel; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *bottomConstraint; @end 中,您不仅可以避免使用// CustomCell.m #import "CustomCell.h" @implementation CustomCell // intentionally blank @end 引用(只需使用您连接的cellForRowAtIndexPath出口),还可以引用底部约束:

tag

顺便说一下,如果您正在修改底部约束,您可能想告诉表视图它应该根据约束自动调整单元格大小,例如在customLabel中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath];

    cell.customLabel.text = @"Foo";
    cell.bottomConstraint.constant = 100;

    return cell;
}

有关详细信息,请参阅WWDC 2014视频What's New in Table and Collection Views

(对于Swift演绎​​,请参阅此问题的修订历史。)

答案 1 :(得分:0)

如果UILabel,您需要绑定IBOutlet以获得底部约束。如何操作请点击此链接:AutoLayout with hidden UIViews?