Код следует после этого объяснения проблемы.Как установить ограничения для изменяемых высот на UITableViewCells, которые имеют от 0 до 2 изображений?
У меня есть UIViewController
, содержащий UITableView
, в UITableViewCell
«ы которых показывают либо один, два, или ноль изображений. С одним и двумя изображениями высота ячейки всегда равна 72, но без каких-либо изображений она должна быть равна нулю. У меня есть две UIView
в моей ячейке таблицы, первая из которых содержит одну UIImageView
, а вторая из них содержит два из них. Я либо скрываю, либо показываю соответствующий, в зависимости от того, имеет ли эта ячейка одно или два изображения. Если ячейка имеет нулевые образы, то оба UIView
скрыты, но, конечно, они все еще составляют часть установленных ограничений, и поэтому результирующая ячейка по-прежнему высотой 72 пикселя, тогда как мне нужно ее свернуть.
Мне сказали, что только способ создания высоты-изменяемыми UITableViewCell
«S является установка ограничений в раскадровке, и что возиться со значениями ограничений программно на лету вызовет проблемы компоновки. Я не знаю, является ли каким-либо из этой консультации верно или нет, поэтому я попробовал следующего (без успеха):
установки явных ссылок на мои
UIView
'ыNSLayoutConstraint
-х, которые контролируют высоту в моихResizableImageCell
вызов, вызывающий ошибкиUnable to simultaneously satisfy constraints
; иустановка прямых ссылок на все
NSLayoutConstraint
«S, которые контролируют высоту в моемResizableImageCell
вызова; и/илидобавление и удаление
UIView
, оба из которых работают нормально, пока вы не начнете прокручивать стол, после чего стол начинает прыгать вверх и вниз после того, как вы поднимаете палец с экрана.
Это текущий код, который управляет ViewController
:
import UIKit
class ViewController: UIViewController
{
@IBOutlet weak var tableView: UITableView!
let imageNames = [ "room", "street", "tree" ]
override func viewDidLoad()
{
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0
}
func getRandomInt (from start: Int, to end: Int) -> Int
{
return Int(arc4random_uniform(UInt32((end + 1) - start))) + start
}
}
extension ViewController: UITableViewDataSource
{
@available(iOS 2.0, *)
public func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "ResizableImageCell") as! ResizableImageCell
let numImages = getRandomInt(from: 0, to: 2)
cell.view1.isHidden = numImages != 1
cell.view2.isHidden = numImages != 2
var rand = getRandomInt(from: 0, to: imageNames.count - 1)
switch numImages
{
case 1: cell.image1.image = UIImage(named: imageNames[ rand ])
case 2: cell.image2.image = UIImage(named: imageNames[ rand ])
default: ()
}
guard numImages == 2 else { return cell }
rand = getRandomInt(from: 0, to: imageNames.count - 1)
cell.image3.image = UIImage(named: imageNames[ rand ])
return cell
}
func tableView (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return 64
}
}
Это текущий код, который управляет мой заказ ResizableImageCell
клетки
import UIKit
class ResizableImageCell: UITableViewCell
{
@IBOutlet weak var view1: UIView!
@IBOutlet weak var view2: UIView!
@IBOutlet weak var image1: UIImageView!
@IBOutlet weak var image2: UIImageView!
@IBOutlet weak var image3: UIImageView!
override func awakeFromNib()
{
super.awakeFromNib()
}
}
А вот скриншот из существующих раскадровка:
Благодарим за внимание.
Спасибо @ Chief-Lutz, я попробую это и дам вам знать результаты. –
Итак, @ Chief-Lutz: пока ничего не закончилось, но это выглядит так: * ваше предложение будет работать, спасибо. –
@ TheMotherofJosephBeuys - Надеюсь, это помогло. Добро пожаловать :) –