如何增加特定 UITableViewCell 的大小?
How to increase the size of particular UITableViewCell?
以上是我的 UITableView。我想要按下右(向下箭头)按钮时我的特定 UITableViewCell 如下图所示。
但问题是,当我按下右(向下箭头)按钮时,我收到如下警告。
2020-09-18 12:00:15.107030+0530 ET WIFI[1789:44926] [LayoutConstraints] 无法同时满足约束条件。
可能至少以下列表中的约束之一是您不想要的。
试试这个:
(1)查看每个约束并尝试找出您不期望的;
(2) 找到添加了不需要的约束或约束的代码并修复它。
(
“”,
“”,
“”,
“”
)
将尝试通过打破约束来恢复
在 UIViewAlertForUnsatisfiableConstraints 处创建符号断点以在调试器中捕获此问题。
中列出的 UIView 的 UIConstraintBasedLayoutDebugging 类别中的方法也可能有帮助。
下面是我的 UITableViewCell class.
class RoomTableViewCell: UITableViewCell {
@IBOutlet weak var roomIcon: UIImageView!
@IBOutlet weak var roomNameLabel: UILabel!
@IBOutlet weak var toggleButton: UIButton!
@IBOutlet var viewHeight: NSLayoutConstraint!
var viewController:HomeViewController?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
func initializeViewController(myViewController:HomeViewController) {
self.viewController = myViewController
}
@IBAction func toggleButtonPressed(_ sender: UIButton) {
if toggleButton.image(for: .normal) == UIImage(named: "ArrowDownImage") {
toggleButton.setImage(UIImage(named: "ArrowUpImage"), for: .normal)
self.viewHeight.constant = 100
self.viewController?.roomTableView.reloadData()
} else {
toggleButton.setImage(UIImage(named: "ArrowDownImage"), for: .normal)
self.viewHeight.constant = 200
self.viewController?.roomTableView.reloadData()
}
}
}
现在它工作正常,但问题是当我按下右键时,我在控制台中收到以上警告消息。你能帮我解决这个问题吗?
您需要在增加视图高度时增加 tableView Cell 的高度
struct TableData {
var height: CGFloat?
var color: UIColor?
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var tableData = [TableData]()
override func viewDidLoad() {
super.viewDidLoad()
for i in 0...10{
self.tableData.append(TableData(height: 50, color: .red))
}
self.tableView.reloadData()
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return self.tableData[indexPath.row].height ?? 0
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.tableData.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if self.tableData[indexPath.row].height == 100 {
self.tableData[indexPath.row].color = .red
self.tableData[indexPath.row].height = 50
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
else {
self.tableData[indexPath.row].color = .red
self.tableData[indexPath.row].height = 100
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell!.backgroundColor = self.tableData[indexPath.row].color
return cell!
}
}
didselect part will come in ur button click part
不幸的是,有几种可能性。
您的单元格内部存在约束问题。我假设这是一个情节提要,并且有一个绑定到 viewHeight
并设置为 100 的约束。尝试将其设置为 200,看看情节提要中是否出现错误。如果这样做,请在此处修复它。如果你不这样做,那就继续前进。
您没有使用自动行高。检查是否在故事板中将它们设置为自动或在您的代码中。如果在您的代码中为行方法实现了高度,甚至在 table 视图上设置了行高,那么您必须在代码中修复此问题(在故事板中更改它是不够的)。
问题在优先级。这其实很常见。在其中一个步骤中,您的系统可能无法解决约束,因此它开始抱怨。它通常稍后会解决它们,但看到这些警告很烦人。在单元格中,它通常可以通过降低情节提要中的约束优先级来简单地修复。例如,我确信您可以在不破坏任何逻辑的情况下将此 viewHeight
优先级从 1000 降低到 900。在大多数情况下,我实际上降低了固定在单元格底部的约束的优先级。
与问题没有直接关系,但请在您的视图控制器上使用 weak
,否则您将有保留周期和内存泄漏。应该只是:
weak var viewController: HomeViewController?
此外,在调整单元格大小时,我们通常不会在 table 视图上调用重新加载。只需调用
就可以使它无效
self.viewHeight.constant = 200
self.viewController?.roomTableView?.beginUpdates()
self.viewController?.roomTableView?.endUpdates()
以上是我的 UITableView。我想要按下右(向下箭头)按钮时我的特定 UITableViewCell 如下图所示。
但问题是,当我按下右(向下箭头)按钮时,我收到如下警告。
2020-09-18 12:00:15.107030+0530 ET WIFI[1789:44926] [LayoutConstraints] 无法同时满足约束条件。
可能至少以下列表中的约束之一是您不想要的。
试试这个:
(1)查看每个约束并尝试找出您不期望的;
(2) 找到添加了不需要的约束或约束的代码并修复它。
(
“
将尝试通过打破约束来恢复
在 UIViewAlertForUnsatisfiableConstraints 处创建符号断点以在调试器中捕获此问题。
class RoomTableViewCell: UITableViewCell {
@IBOutlet weak var roomIcon: UIImageView!
@IBOutlet weak var roomNameLabel: UILabel!
@IBOutlet weak var toggleButton: UIButton!
@IBOutlet var viewHeight: NSLayoutConstraint!
var viewController:HomeViewController?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
func initializeViewController(myViewController:HomeViewController) {
self.viewController = myViewController
}
@IBAction func toggleButtonPressed(_ sender: UIButton) {
if toggleButton.image(for: .normal) == UIImage(named: "ArrowDownImage") {
toggleButton.setImage(UIImage(named: "ArrowUpImage"), for: .normal)
self.viewHeight.constant = 100
self.viewController?.roomTableView.reloadData()
} else {
toggleButton.setImage(UIImage(named: "ArrowDownImage"), for: .normal)
self.viewHeight.constant = 200
self.viewController?.roomTableView.reloadData()
}
}
}
现在它工作正常,但问题是当我按下右键时,我在控制台中收到以上警告消息。你能帮我解决这个问题吗?
您需要在增加视图高度时增加 tableView Cell 的高度
struct TableData {
var height: CGFloat?
var color: UIColor?
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var tableData = [TableData]()
override func viewDidLoad() {
super.viewDidLoad()
for i in 0...10{
self.tableData.append(TableData(height: 50, color: .red))
}
self.tableView.reloadData()
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return self.tableData[indexPath.row].height ?? 0
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.tableData.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if self.tableData[indexPath.row].height == 100 {
self.tableData[indexPath.row].color = .red
self.tableData[indexPath.row].height = 50
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
else {
self.tableData[indexPath.row].color = .red
self.tableData[indexPath.row].height = 100
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell!.backgroundColor = self.tableData[indexPath.row].color
return cell!
}
}
didselect part will come in ur button click part
不幸的是,有几种可能性。
您的单元格内部存在约束问题。我假设这是一个情节提要,并且有一个绑定到
viewHeight
并设置为 100 的约束。尝试将其设置为 200,看看情节提要中是否出现错误。如果这样做,请在此处修复它。如果你不这样做,那就继续前进。您没有使用自动行高。检查是否在故事板中将它们设置为自动或在您的代码中。如果在您的代码中为行方法实现了高度,甚至在 table 视图上设置了行高,那么您必须在代码中修复此问题(在故事板中更改它是不够的)。
问题在优先级。这其实很常见。在其中一个步骤中,您的系统可能无法解决约束,因此它开始抱怨。它通常稍后会解决它们,但看到这些警告很烦人。在单元格中,它通常可以通过降低情节提要中的约束优先级来简单地修复。例如,我确信您可以在不破坏任何逻辑的情况下将此
viewHeight
优先级从 1000 降低到 900。在大多数情况下,我实际上降低了固定在单元格底部的约束的优先级。
与问题没有直接关系,但请在您的视图控制器上使用 weak
,否则您将有保留周期和内存泄漏。应该只是:
weak var viewController: HomeViewController?
此外,在调整单元格大小时,我们通常不会在 table 视图上调用重新加载。只需调用
就可以使它无效self.viewHeight.constant = 200
self.viewController?.roomTableView?.beginUpdates()
self.viewController?.roomTableView?.endUpdates()