2012-03-31 56 views
2

我有一個較大的UIScrollView的內部非滾動的UITableView。由於表格視圖不滾動,我希望其框架大小始終與其內容大小相匹配。設定幀以匹配其內容大小

我有以下的方法,我稱之爲:

- (void)resizeTableViewFrameHeight 
{ 
    // Table view does not scroll, so its frame height should be equal to its contentSize height 
    CGRect frame = self.tableView.frame; 
    frame.size = self.tableView.contentSize; 
    self.tableView.frame = frame; 
} 

的問題是,我必須呼籲在錯誤的時間這種方法(被設定的contentSize之前)。我想知道,是否有一個屬性,我可以在UITableView上設置,將導致其框架始終自動匹配其內容大小?

回答

0

沒有屬性,動態地調整表視圖的框架。另外,我不認爲一個UITableView就能算出它的整個contentSize的前期,因爲表視圖可以在尺寸上是實際上是無限,這取決於什麼從其datasource和其他委託方法如heightForRowAtIndexPath規定。這些方法可以是動態的,因此幾乎不可能預測表視圖的整個大小。

我斷定你也許不正確使用該UI元素。

解決方法:

通過有約束滾動視圖,你可以簡單地讓它滾動的可視區域內的表視圖的框架。也許你需要在表視圖滾動時防止滾動視圖滾動,反之亦然。您可以在UIScrollView委託方法中輕鬆完成此操作。

+0

感謝您的輸入。我不能讓我的表格視圖滾動,它對我的​​用戶界面沒有意義。但我想我只能自己調整其框架。 – Darren 2012-03-31 22:26:52

0

我需要做這樣的事情在IOS 8:包含非滾動固定寬度的表的內容的行的數目可變的視圖滾動視圖,所以想動態調整表視圖的高度。

什麼工作對我來說是建立在一個虛擬值表視圖的高度約束,然後創建網點都表視圖和約束。然後,這是我所需要的:

class ViewController: UIViewController, UITableViewDataSource { 

    @IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint! 
    @IBOutlet weak var tableView: UITableView! 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     tableViewHeightConstraint.constant = tableView.contentSize.height 
    } 

    // (plus additional data source methods, etc.) 
} 

我可以想像的情況下(也許有很多行,或可變高度的行)在那裏它可能不是這樣簡單,但這個工作對我來說。

相關問題