我MEDIUMBLOB
中有TableView
,行数每次都是随机的。
我希望整个MainstoryBoard
的高度是灵活的 - 我的意思是,例如:如果我在TableView
中有4行,并且每个TableView
行高度为22,那么{ {1}}身高将为88。
另一个例子:
行数:2
行高= 22
TableView
将是44。
我该怎么做?
答案 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)
}