我正在使用子類UITableViewCell,並且需要在使用自動佈局時將UILabel的文本與左上角對齊。我意識到閱讀sizeToFit真的不應該用於自動佈局,我想避免它,並以某種方式使用約束。基本上,每次重新使用單元格時,標籤的文本都會重置,因此在重新使用時需要動態調整大小。UITableViewCell單元重用和UILabel自動佈局動態調整
這裏的子類細胞內的懶惰初始化標籤:
- (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;
似乎並沒有工作althoug h在大多數答案中都提到過。
目前有這個實現,但沒有看到任何結果。 UILabel sizeToFit doesn't work with autolayout ios6
我試過另一個答案。 UILabel sizeToFit only works with AutoLayout turned off
我覺得我只是缺少一個約束,除了上面的約束之外還可以添加約束,但是我嘗試添加的編程約束不起作用或拋出異常。我在代碼中完全工作,沒有xibs。
ETA:嘗試設置現有垂直約束線內的高度約束:
喜歡這裏建議:Dynamically change UILabel width not work with autolayout
垂直約束線之上使其:
-[commentsLabel(>[email protected])]-
我已經與高度值和優先級值混淆在一起,沒有任何變化。
ETA:取得一些進展,我認爲這與標籤的底部填充的事,嘗試這樣做,一些對齊的標籤的正確有些不是:在事件
->=commentsToBottomPadding-
你見過這篇文章嗎? http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights – smileyborg