2015-10-02 102 views
0

我在內容視圖中採取了兩個視圖。 「發佈容器視圖」(紅色背景)的高度根據標籤的高度動態計算(全部使用Autolayout完成)。如何使用Autolayout動態設置UITableView單元的高度?

現在我想,如果「郵政集裝箱視圖」(紅色背景)的高度將增加,那麼單元格視圖的高度自動增加。我想用自動佈局來做到這一點。

我想使用Autolay來計算UITableview單元的高度。怎麼做 ?

單元格高度=郵政容器視圖(柔性按標籤高度)+圖像容器圖高度(300修復)

我已經看到這種類型的方法,但不知道如何實現我的代碼?

- (CGFloat)calculateHeightForConfiguredSizingCell:(UITableViewCell *)sizingCell 
{ 

    sizingCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.MyTableView.frame), CGRectGetHeight(sizingCell.bounds)); 

    [sizingCell setNeedsLayout]; 
    [sizingCell layoutIfNeeded]; 

    CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return size.height + 1.0f; // Add 1.0f for the cell separator height 
} 
+0

提供更多詳細信息 – baydi

+0

請參閱更新 –

+0

使用長寬比 – baydi

回答

1

爲了計算細胞的高度:

CGFloat height ; // take global variable 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     height = cell.PostContainerView.frame.size.height ; 
} 


- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    height = height + 300 //(300 is Fix height of Image Container View) ; 
    return height ; 
} 
1

您是否想計算高度或者使用tableView來計算高度本身,考慮您的自動佈局配置?

要做到這一點,沒有實現的委託方法heightForRowAtIndexPathestimatedHeightForRowAtIndexPath代替(你想要的那一刻任何值)。

tableView將確定考慮到自動佈局約束的單元格的高度。 請注意,有時您需要在更新後在您的手機上撥打layoutIfNeeded。 (在的cellForRowAtIndexPath爲例)

+0

我想增加TableViewCell的高度,但是我必須爲它做什麼constarint。 –

+0

考慮到您的實際配置和使用我的解釋,您的單元格應該調整好。同時檢查您是否將標籤(多行)的numberOfLines設置爲「0」。 您可以通過編程方式更改Post Container View的高度約束(使用NSLayoutConstraint的IBOutlet並使用_constant_屬性進行播放),並查看單元格高度更改,從而檢查它是否工作正常。 – dosdos

+0

我已經給Post Container View和label做了所有constaraint,它工作正常,現在我的posint是,單元格的高度當Post Container View的高度會增加時如何計算? –

0

使用此Extension類字符串:

import UIKit 

extension String {  
    func sizeOfString (font: UIFont, constrainedToWidth width: Double) -> CGSize { 
     return NSString(string: self).boundingRectWithSize(CGSize(width: width, height: DBL_MAX), 
      options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
      attributes: [NSFontAttributeName: font], 
      context: nil).size 
    } } 

UITableView代表計算UILabel寬度:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {   
     let item = "hkxzghkfjkgjkfxkj jjhghdjajfjkshgjkhkkn jhkhhgdfgjkhsfjkdghhhsxzgnfshgfhk jhsfgfhjfhghj " 
     let widthOfLabel = Double(view.frame.size.width) - 30 
     let textHeight = item.sizeOfString(UIFont.systemFont(14), constrainedToWidth: widthOfLabel) 
      return (padding + textHeight.height) 
    } 
相關問題