点击单元格后不同的 UITableViewCell 子视图布局
Different UITableViewCell subviews layout after tapping a cell
我创建了一个包含多个单元格的 UITableView。所有的单元格都是一样的,我想在点击单元格后更改单元格的子视图布局和单元格的高度。更改单元格本身的高度非常容易,但我不知道如何更改单元格的子视图布局...
我应该重新加载一个新的自定义单元格而不是点击的单元格还是只更新单元格子视图框架?
这是正常布局:
这是新布局:
约束不是问题,我的问题是如何添加在普通单元格中未使用的元素,现在需要重新构建和放大它们(例如主要的 UIImageView 和 UILabel)
我有不同的单元格并在单击单元格时重新加载它们。
class TableViewController: UITableViewController {
var largeRow: IndexPath?
var data: [Int] = [0, 1, 2, 3, 4, 5, 6, 7]
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension TableViewController {
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath == largeRow {
return makeLargeCell(at: indexPath)
} else {
return makeNormalCell(at: indexPath)
}
}
}
extension TableViewController {
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let largeRow = largeRow {
if largeRow == indexPath {
self.largeRow = nil
tableView.reloadRows(at: [indexPath], with: .fade)
} else {
self.largeRow = indexPath
tableView.reloadRows(at: [largeRow, indexPath], with: .fade)
}
} else {
self.largeRow = indexPath
tableView.reloadRows(at: [indexPath], with: .fade)
}
}
}
我创建了一个包含多个单元格的 UITableView。所有的单元格都是一样的,我想在点击单元格后更改单元格的子视图布局和单元格的高度。更改单元格本身的高度非常容易,但我不知道如何更改单元格的子视图布局...
我应该重新加载一个新的自定义单元格而不是点击的单元格还是只更新单元格子视图框架?
这是正常布局:
这是新布局:
约束不是问题,我的问题是如何添加在普通单元格中未使用的元素,现在需要重新构建和放大它们(例如主要的 UIImageView 和 UILabel)
我有不同的单元格并在单击单元格时重新加载它们。
class TableViewController: UITableViewController {
var largeRow: IndexPath?
var data: [Int] = [0, 1, 2, 3, 4, 5, 6, 7]
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension TableViewController {
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath == largeRow {
return makeLargeCell(at: indexPath)
} else {
return makeNormalCell(at: indexPath)
}
}
}
extension TableViewController {
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let largeRow = largeRow {
if largeRow == indexPath {
self.largeRow = nil
tableView.reloadRows(at: [indexPath], with: .fade)
} else {
self.largeRow = indexPath
tableView.reloadRows(at: [largeRow, indexPath], with: .fade)
}
} else {
self.largeRow = indexPath
tableView.reloadRows(at: [indexPath], with: .fade)
}
}
}