2012-03-31 52 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.) 
} 

我可以想像的情况下(也许有很多行,或可变高度的行)在那里它可能不是这样简单,但这个工作对我来说。

相关问题