2014-01-18 121 views
5

我正在使用子類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- 
+0

你見過這篇文章嗎? http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights – smileyborg

回答

1

解決方案任何其他人跑與一個UITableViewCell和動態改變的自定義標籤上的同一個問題:

-[commentsLabel]->=yourBottomPadding- 

提出,在垂直方向制約

稱這種現象在您設置文字後的viewController:

[cell updateConstraints];