我在 UITableView 中有多个原型(prototype)单元格。现在在其中一个单元格中,我有一个带有 top 、'bottom'、leading 和 trailing 约束的 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-推荐答案 strong>
我建议为您的单元格创建一个 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)的基类:
那么你不仅可以将 socket 连接到标签,还可以连接底部约束:
然后在您的 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/
|