uitableview在swift ios中的高度不能动态改变吗?
uitableview在swift ios中的高度不能动态改变吗?
我遇到了麻烦。我有一个城市列表,我想在UITableView
中显示这些城市,但我禁用了UITableView的滚动功能,因为我不想显示滚动条。当我动态改变UITableView的高度时,它没有改变,并且UITableView没有显示所有的城市。以下是代码,请查看一下。
import UIKit
class FlightDetailsOneWayViewController: UIViewController {
var flightDetailArr:[FlightDetailsOneWay] = [FlightDetailsOneWay]()
@IBOutlet var tableView: UITableView!
@IBOutlet var scrollview: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
flightDetailArr.append(FlightDetailsOneWay(depCity: "London"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "China"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "Singapore"))
flightDetailArr.append(FlightDetailsOneWay(depCity: "Dubai"))
self.tableView.scrollEnabled = false
let cellHeight = CGFloat(self.tableView.rowHeight)
let totalCity = CGFloat(flightDetailArr.count)
let totalHeight = cellHeight * totalCity
self.tableView.frame.size.height = CGFloat(totalHeight)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return flightDetailArr.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell:FlightDetailsCell = tableView.dequeueReusableCellWithIdentifier("FlightDetail") as FlightDetailsCell
let flight = flightDetailArr[indexPath.row]
cell.setCell(flight.depCity)
return cell
}
}
class FlightDetailsOneWay {
var depCity = ""
init(depCity: String) {
self.depCity = depCity
}
}
class FlightDetailsCell: UITableViewCell {
@IBOutlet var depCity: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func setCell(depCity: String) {
self.depCity.text = depCity
}
}
以上是代码的预览图。
在Swift iOS中,UITableView的高度不会动态改变,出现这个问题的原因是没有正确连接和更新高度约束。解决方法如下:
1. 打开Storyboard,在你添加了约束的UIView上点击"Constraints"图标,查看所有的约束。找到你想要改变属性的约束。
2. 点击"View Controller",打开"Show the connection inspector"。在这里你可以看到在你的视图控制器中定义的所有IBOutlet。选择你想要连接的约束变量。
3. 这样你就可以将约束变量连接起来了。
当我们在UITableView上应用高度约束时,它可能不会在模拟器中显示。这可能是因为初始的高度约束常量值不正确。
文章结束。
问题的原因是UITableView的高度无法动态改变。解决方法有两种:一种是使用原型单元格,如果所有的单元格都具有相同的外观,可以使用原型单元格;另一种方法是在代理方法中使用tableView:heightForRowAtIndexPath:函数来动态设置单元格的高度,并在需要改变高度时调用beginUpdates()和endUpdates()方法。
使用原型单元格的方法可以参考这两个教程:第一个教程和第二个教程。
使用tableView:heightForRowAtIndexPath:的方法示例代码如下:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 42.0
}
使用beginUpdates()和endUpdates()方法可以在需要改变高度时调用,示例代码如下:
tableView.beginUpdates()
// 改变高度的操作
tableView.endUpdates()
以上是该问题的原因和解决方法的简要介绍。