我有一个UITableViewController
,其中单元格的自我大小使用Xcode 8和Swift 3.现在我正在使用 Xcode 9和Swift 4,它们没有扩展并且是只使用默认高度44。
(我每个UITableViewCell
都有一两句话)
我之前使用过这个:
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
...但是能够对其进行评论,因为每Updating Your App for iOS 11表示默认情况下会自行调整大小:
我尝试过将部署目标更改为iOS 11,在Storyboard中玩游戏(但我使用的是Table View Cell样式Basic,所以没有太多的AutoLayout要做),我不能弄清楚发生了什么。
我将UILabel
标题设置为0行,并且有换行字换行,但仍然没有接近让Xcell 9中的文本内容扩展单元格。任何想法?
谢谢!
编辑:
以下是用于固定的选项(我没有),因为它是基本单元格:
答案 0 :(得分:19)
我遇到了同样的问题并用代码行解决了这个问题:
class MyTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
}
也许这是Xcode中的一个错误。
<强> 更新 强>
Xcode 9 beta 3中的新功能:
Interface Builder现在支持设置UITableView的estimatedRowHeight。这允许通过将估计的高度设置为非零值来自行调整表格单元格,并且默认情况下处于启用状态。 (17995201)
答案 1 :(得分:16)
我有同样的破桌视图问题。修复只需点击一下。
使用表视图转到xib或storyboard场景,转到大小检查器,您将看到表视图高度(即使在动态表视图中)为44,部分将为22.只需单击“自动”和繁荣,它将按预期呈现。
请注意,我还在UITableViewController子类的viewDidLoad中指定了以下内容(layoutSubviews解决了第一次加载tableViewController时未能正确定位与非半透明navBar相关的问题)。
self.tableView.estimatedRowHeight = 180;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableView layoutSubviews];
答案 2 :(得分:1)
除了
tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
你应该为tabeleViewCell的contentView
设置一个高度约束。
class CustomTableViewCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let height: CGFloat = 200
heightAnchor.constraint(equalToConstant: height).isActive = true
}
}
答案 3 :(得分:1)
我遇到了同样的问题,我在很多文档中都读过这个问题,满意的答案是这样的,你必须检查两个选项才能获得合适的高度,因为初始UI设置需要估计高度,如滚动视图栏和其他这样的东西。
提供行高的非负估计可以提高加载表视图的性能。如果表包含可变高度行,则在加载表时计算所有高度可能会很昂贵。使用估计允许您将几何计算的一些成本从加载时间推迟到滚动时间。 创建自定义表视图单元格时,需要设置此属性并使用约束来定义单元格的大小。 默认值为0,表示没有估计值。 (Apple文档)&gt;
另请注意,xCode 9中存在一个错误,当您尝试在自动高度计算中应用延迟加载时,它会意外滚动,因此我建议您在这方面采用编程方式。
self.postTableView.estimatedRowHeight = 200;
self.postTableView.rowHeight = UITableViewAutomaticDimension;
像这样的东西。谢谢!
答案 4 :(得分:1)
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var tblview: UITableView!
var selectindex = -1
var arrnumber = ["1","2","3","4","5"]
var image = ["index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrnumber.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as! ExpandableTableViewCell
cell.lblnumber.text = arrnumber[indexPath.row]
cell.img.image = UIImage(named: image[indexPath.row] as! String)
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if (selectindex == indexPath.row)
{
return 250
}
else{
return 60
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if(selectindex == indexPath.row)
{
selectindex = -1
}else{
selectindex = indexPath.row
}
self.tblview.beginUpdates()
self.tblview.endUpdates()
}
}
答案 5 :(得分:1)