#ios #swift #uitableview #uicollectionview #uicollectionviewcell
#iOS #swift #uitableview #uicollectionview #uicollectionviewcell
Вопрос:
У меня есть ячейка представления коллекции, и я хочу добавить в нее представление. Apple заявляет, что представления должны быть добавлены в contentView
. Это там документация:
При настройке ячейки вы добавляете в это представление любые пользовательские представления, представляющие содержимое вашей ячейки. Объект cell помещает содержимое в этом представлении перед любыми фоновыми представлениями.
Однако, кажется, я также могу добавить представление не внутри contentView
, и нет никаких предупреждений или сбоев. Вот мой код. Обратите внимание на комментарий QUESTION
— я хочу знать, можно ли это сделать:
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet private var imageView: UIImageView!
private let titleLabel = UILabel(frame: .zero)
override func awakeFromNib() {
super.awakeFromNib()
// QUESTION: Is this ok? Notice I am not adding the `titleLabel` to `self.contentView`
self.addSubview(titleLabel)
let horizontalCenterConstraint = NSLayoutConstraint(item: titleLabel, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0)
let verticalCenterConstraint = NSLayoutConstraint(item: titleLabel, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: 0)
self.addConstraint(horizontalCenterConstraint)
self.addConstraint(verticalCenterConstraint)
}
}
В приведенном выше коде вместо добавления представления с помощью self.contentView.addSubview
… вместо этого я просто делаю self.addSubview
. Это нормально?
Ответ №1:
Большинство вещей возможно, вопрос в том, почему вы хотите это сделать?
Напрямую нарушая рекомендации автора API, вы рискуете столкнуться с целым рядом потенциальных проблем. например
- Возможно, вы нарушаете что-то, о чем не знаете
- Это может отрицательно повлиять на производительность
- Даже если это работает в настоящее время, это может сломаться в будущем, и у автора нет причин предотвращать это.
Если то, что вы пытаетесь сделать, невозможно иначе, и вы согласны с рисками, дерзайте. В противном случае придерживайтесь явных инструкций автора.
Комментарии:
1. Хорошо, да, я не был уверен в документации Apple. Исходя из того, что вы говорите, я должен добавлять представления только к
contentView
ячейке правильно?
Ответ №2:
Да, я пытался добавить cell
напрямую вместо contentView
. Теперь происходит странная вещь: представление коллекции не может прокручиваться. Мне потребовался 1 час, чтобы понять, что я должен добавить себя в contentView