我正在使用子类UITableViewCell,我需要在使用自动布局时将UILabel的文本对齐到左上角。我意识到读取sizeToFit实际上不应该与自动布局一起使用,我想避免它,并以某种方式使用约束。基本上,每次重复使用单元格时都会重置标签的文本,因此在重用时,大小调整需要是动态的。
这是子类化单元格内的Lazy初始化程序标签:
- (UILabel *)commentsLabel {
if (_commentsLabel == nil) {
_commentsLabel = [[UILabel alloc] init];
[_commentsLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
_commentsLabel.numberOfLines = 0;
_commentsLabel.lineBreakMode = NSLineBreakByWordWrapping;
_commentsLabel.preferredMaxLayoutWidth = 100;
}
return _commentsLabel;
}
标签上设置了自动布局约束(commentsLabel是添加到单元子类上的self.customView的子视图):
[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-locationToTopPadding-[locationLabel(locationHeight)]-locationToCommentsPadding-[commentsLabel]-commentsToBottomPadding-|"
options:0
metrics:@{
@"locationToTopPadding":@(locationToTopPadding),
@"locationHeight":@(locationHeight),
@"locationToCommentsPadding":@(locationToCommentsPadding),
@"commentsToBottomPadding":@(commentsToBottomPadding)
}
views:viewsDictionary]];
[self.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[thumbnailImageView]-[commentsLabel]-|"
options:0
metrics:@{@"commentsWidth":@(commentsWidth)}
views:viewsDictionary]];
设置:
self.commentsLabel.preferredMaxLayoutWidth = 100;
似乎没有用,尽管在大多数答案中提到过。
目前已实施但尚未看到任何结果。 UILabel sizeToFit doesn't work with autolayout ios6
我试过的另一个答案。 UILabel sizeToFit only works with AutoLayout turned off
我觉得我只缺少一个可以添加的限制,除了上面的约束之外,但我尝试添加的程序性约束不起作用或抛出异常。我完全在代码中工作,没有xib。
ETA:尝试在现有垂直约束线内设置高度约束:
像这里建议的那样:Dynamically change UILabel width not work with autolayout
在上面的垂直约束行中:
-[commentsLabel(>=30@900)]-
我已经弄乱了高度值和优先级值,没有任何改变。
ETA:取得一些进展,我认为它与标签的底部填充有关,试过这个并且一些标签正确对齐有些不是:
->=commentsToBottomPadding-
答案 0 :(得分:1)
解决方案,如果其他任何人遇到与UITableViewCell相同的问题,并且动态变化的自定义标签:
-[commentsLabel]->=yourBottomPadding-
将其放在垂直约束
中在设置文本后在viewController中调用它:
[cell updateConstraints];