OGeek|极客世界-中国程序员成长平台

标题: ios - UILabel 获取底部空间约束 - 自动布局 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 12:27
标题: ios - UILabel 获取底部空间约束 - 自动布局

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

我已经在 xib 中为这个约束赋予了 identifier,但是当我执行 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>
)

为什么没有显示尾随、前导、底部和顶部约束?我哪里错了?我该如何解决?

编辑(未反射(reflect)约束更改)

-(IBAction)btnShowCtrl_clickid)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];
    }];
}



Best Answer-推荐答案


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

//  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

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

enter image description here

那么你不仅可以将 socket 连接到标签,还可以连接底部约束:

enter image description here

然后在您的 cellForRowAtIndexPath 中,您不仅可以避免使用 tag 引用(只需使用您连接的 customLabel socket ),而且您也可以引用底部约束:

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier"CustomCell" forIndexPath:indexPath];

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

    return cell;
}

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

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 44;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}

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

(对于 Swift 版本,请参阅此问题的修订历史记录。)

关于ios - UILabel 获取底部空间约束 - 自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34194184/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4