У меня возникли некоторые трудности с автоматическим размещением в пределах UITableViewCell. Я довольно новичок в Swift, поэтому любая помощь будет оценена. Я пытаюсь создать пользовательскую ячейку, в которой ячейка содержит три объекта UIImageView, расположенных как показано.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+----------------------------------+ +-----------------------------------+
| | | |
| | | |
| | | |
| | | |
| | | |
| | | view2 |
| | | |
| | | |
| | | |
| | | |
| | +-----------------------------------+
| view1 |
| | +-----------------------------------+
| | | |
| | | |
| | | |
| | | |
| | | view3 |
| | | |
| | | |
| | | |
| | | |
| | | |
+----------------------------------+ +-----------------------------------+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Но на самом деле я получаю следующее, где view1, view2 и view3 правильно выровнены, но они не привязываются к contentView ячейки внизу, и поскольку это ячейка с изменяемым размером и ничего не прикреплено к нижней части, она игнорирует содержимое и фиксирует себя на предполагаемой 44 высокой расчетной высоте ячейки.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+----------------------------------+ +-----------------------------------+
| | | |
| | | |
| | | |
| | | |
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| | | view2 |
| | | |
| | | |
| | | |
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| | +-----------------------------------+
| view1 |
| | +-----------------------------------+
| | | |
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| | | |
| | | |
| | | view3 |
| | | |
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| | | |
| | | |
| | | |
+----------------------------------+ +-----------------------------------+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Приведенный ниже код включает метод .anchor в качестве расширения UIView для более эффективной обработки якорей, но в противном случае вы получите точку.
import UIKit
class GalleryTableCell: UITableViewCell, SelfConfiguringCell {
lazy var view1: UIView = {
let view = UIView()
view.backgroundColor = .red
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
lazy var view2: UIView = {
let view = UIView()
view.backgroundColor = .blue
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
lazy var view3: UIView = {
let view = UIView()
view.backgroundColor = .green
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
static var identifier: String {
return String(describing: self)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupCellView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupCellView() {
backgroundColor = .systemBackground
[view1, view2, view3].forEach { ( addSubview($0) ) }
view1.anchor(top: topAnchor, bottom: nil, leading: nil, trailing: trailingAnchor, with: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 6), size: CGSize(width: 175, height: 0))
view1.heightAnchor.constraint(equalTo: view1.widthAnchor).isActive = true
view2.anchor(top: view1.bottomAnchor, bottom: nil, leading: nil, trailing: view1.trailingAnchor, with: UIEdgeInsets(top: 6, left: 0, bottom: 0, right: 0))
view2.resize(to: view1)
view3.anchor(top: topAnchor, bottom: view2.bottomAnchor, leading: leadingAnchor, trailing: view1.leadingAnchor, with: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 6))
}
func configure(with app: Any) {}
}
Поскольку я использую автоматическое измерение для автоматического изменения размера ячейки выше требуется ограничить представление в ячейке, в противном случае размер ячейки будет соответствовать предполагаемой высоте (44), и три вида расширятся, охватывая несколько ячеек под ней.
Помогите понять, что я делаю неправильно будет высоко ценится.