2014-09-06 56 views
0

我有一個UITableViewUITableViewCell subclass,此單元的子類包含UILabel。文本將從互聯網加載。在哪裏動態更改UITableViewCell子類內的UILable大小

我想根據文本調整此UIlabel的大小。

cell subclass UILabel只知道大小時文字從網絡到達時,意味着我必須做的UILabel調整大小時,細胞正在制定這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // resizing label here 
    cell.mylabel ... 
    } 
  • 是否有任何其他的方式做同樣的或更有效的方式來做同樣的事情?
  • 可以在單元格子類內完成調整大小嗎?
+0

你可以這樣做。但是在這樣做的時候是否有問題,或者你只是要求最佳實踐?如果你正在使用autoLayout,那麼你可以使用約束,但是必須計算大小! – 2014-09-06 14:33:52

回答

-1

您可以使用該代碼通過其文本計算標籤的大小。但是您必須首先分配標籤寬度或高度。

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
NSDictionary *attributes = @{NSFontAttributeName:[UIFont fontWithName:@"AppleSDGothicNeo-Regular" size:18], NSParagraphStyleAttributeName:paragraphStyle.copy}; 

CGRect cellSize = [yourText boundingRectWithSize:CGSizeMake(yourLabelWidth,9999) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; 
+0

在cellforrowatindexpath或cell內部子類或其他任何有效方式中,哪裏可以做到這一點?這就是我在我的問題 – 2014-09-06 17:33:56

+0

中提出的問題。獲取cellSize.size.height的值並將其放在heightForRowAtIndexPath中以返回tableView中的單元格高度。 – user2239950 2014-09-07 09:39:41

0

當您更新單元格中標籤的文本,你應該叫sizeToFit在標籤上調整其大小:

[cell.myLabel sizeToFit]; 

請勿直接設置框架。

個人而言,我對的UILabel像這樣進行sizeToFit細胞亞類中:那麼當在單元格中的文本被更新

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    [self.myLabel sizeToFit]; 
} 

(應內的cellForRowAtIndexPath發生),調用[cell setNeedsLayout]這將強制layoutSubviews方法在單元上觸發。

這種方法可以很好地分離關注點,並使Cocoa框架以您所希望的方式工作。

如果你希望在對的UILabel垂直調整和水平,你需要將numberOfLines屬性設置爲0,像這樣:

self.myLabel.numberOfLines = 0; 
-1

您應該計算就像user2239950說你的高度。

看起來你的細胞高度計算相當密集,所以我認爲計算它的最佳位置就是當你從互聯網上收到你的文本時。

除了存儲文本的NSString旁邊,您應該添加一個NSNumber屬性,該屬性一旦計算就存儲高度,並在您每次需要時重新使用它。

+0

我沒有問過如何調整大小,我問了在哪裏調整大小來閱讀我的問題。 – 2014-09-06 22:27:56

0

執行測試以查看重新加載表時調用哪個tableview委託方法。我想,當你等待網絡返回你的標籤細節時,tableview至少已經加載了一次,所以你會在調用之後[UITableView reloadData];某處。在各種委託方法中放入幾個日誌語句,以查看哪些是更新標籤的最佳方法。