• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 12:27:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap