按数字或行设置TableView高度

时间:2015-08-01 10:27:07

标签: ios swift uitableview

MEDIUMBLOB中有TableView,行数每次都是随机的。 我希望整个MainstoryBoard的高度是灵活的 - 我的意思是,例如:如果我在TableView中有4行,并且每个TableView行高度为22,那么{ {1}}身高将为88。 另一个例子: 行数:2 行高= 22 TableView将是44。

我该怎么做?

10 个答案:

答案 0 :(得分:33)

您可以根据contentSize更改UITableView高度,如下所示:

  

Swift 2.2

tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height)
  

Swift 3或4 +

tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)

并确保在viewDidAppear方法

中编写上述行

您还需要在viewDidLayoutSubviews中编写上述行。

  

Swift 2.2

func viewDidLayoutSubviews(){
     tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.contentSize.height)
     tableView.reloadData()
}
  

Swift 3或4 +

func viewDidLayoutSubviews(){
     tableView.frame = CGRect(x: tableView.frame.origin.x, y: tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
     tableView.reloadData()
}

答案 1 :(得分:1)

取出父视图的高度约束的出口,并为其分配表格视图内容的高度+常量(视图中其他内容的额外高度)

heightConstraintView.constant = tableView.contentSize.height + constantValue //use the value of constant as required.

并在cellForRowAt方法中编写此代码。

答案 2 :(得分:1)

const humanUtils = {
  sayRace() {
    console.log('Im a '+ this.race);
  },
  race: 'human'
}

function human() {
  return Object.create(humanUtils);
}

const manUtils = Object.create(humanUtils, {
  gender: { value: 'man' }
});

function man() {
  return Object.create(manUtils)
}

function woman() {
    const createWoman = new human();
    createWoman.gender = 'woman';
    return createWoman;
}

const mankind = human();
const adam = man();
const eve = woman();

console.log(adam.gender)
adam.sayRace()
console.log('humanUtils isPrototypeOf adam:', humanUtils.isPrototypeOf(adam))
console.log('manUtils isPrototypeOf eve:', manUtils.isPrototypeOf(eve))

manUtils.saySlogan = function() {console.log('men are cool because they have a slogan')}

adam.saySlogan()

OR

DispatchQueue.main.async {
    var frame = tableView.frame
    frame.size.height = tableView.contentSize.height
    tableView.frame = frame
}

答案 3 :(得分:1)

只需采取出口以限制表视图高度,并以willDisplay cell: UITableViewCell的{​​{1}}方法进行更新

UITableView

答案 4 :(得分:0)

将其用于Swift 3

 override func viewDidLayoutSubviews(){
    tableView.frame = CGRect(x: tableView.frame.origin.x, y:  tableView.frame.origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
    tableView.reloadData()
}

答案 5 :(得分:0)

要与自动版式一起使用:

viewDidLoad()中的某个地方

tableView.anchor(top: view.topAnchor, leading: view.leadingAnchor, bottom: nil, trailing: view.trailingAnchor)

,然后在您的viewDidLayoutSubViews()

tableView.heightAnchor.constraint(equalToConstant: tableView.contentSize.height).isActive = true

答案 6 :(得分:0)

注意:当您增加表格视图高度时,它将超出视图的侧面。滚动会遇到问题。

Ex:在内部保留一张桌子的视图,并将左,右,底部,顶部的约束赋予零(0)。

现在重新加载tableview,假设每行2行的高度为20,现在总行高度为40。将其细化并赋予表格视图高度,Table视图将仅显示40高度(您可以通过约束来分配tableview高度( )表格视图的内容大小都根据行的高度给出相同的高度)。

但是,如果重新加载50行,则会出现滚动问题,因为这些行的高度赋予了表格视图高度,此处表格视图高度的扩展幅度大于屏幕高度。

要解决此问题,您应该在表格视图之外使用滚动视图。

答案 7 :(得分:0)

采用表格视图高度的出口,并使用cellForRowAt中的表格视图行高度对其进行设置,

tableviewHeight.constant =(tableView.contentSize.height * no_of_rows)+底部空间

答案 8 :(得分:0)

我最终使用的解决方案无法给出正确的高度。

extension UITableView {
    var contentSizeHeight: CGFloat {
        var height = CGFloat(0)
        for section in 0..<numberOfSections {
            height = height + rectForHeader(inSection: section).height
            let rows = numberOfRows(inSection: section)
            for row in 0..<rows {
                height = height + rectForRow(at: IndexPath(row: row, section: section)).height
            }
        }
        return height
    }
}

用法:

tableView.contentSizeHeight

将为您提供表格视图内容的实际计算高度。

答案 9 :(得分:0)

请找到以下代码。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UIScreen.main.bounds.height
}
        
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let tableViewHeight = self.tableView.frame.height
    let contentHeight = self.tableView.contentSize.height
            
    let centeringInset = (tableViewHeight - contentHeight) / 2.0
    let topInset = max(centeringInset, 0.0)
            
    self.tableView.contentInset = UIEdgeInsets(top: topInset, left: 0.0, bottom: 0.0, right: 0.0)
}