Я пытаюсь получить ширину одного из моих подпредставлений в ячейке UITableview. Ниже приведен макет раскадровки. Здесь я пытаюсь получить ширину testView программно.
Это мой класс ячеек.
class MyTableViewCell: UITableViewCell {
@IBOutlet weak var testView: UIView!
@IBOutlet weak var testLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
print("Width = \(testView.frame.width)")
}
override func layoutSubviews() {
print("Updated Width = \(testView.frame.width)")
testLabel.text = "Testview Frame width is =\(testView.frame.width)"
//Perform calculation based on width
}
}
Здесь и сейчас проблема в том, что я не получаю правильную ширину в первый раз, как только я выполняю некоторые операции, такие как нажатие на ячейку, я получаю обновленную правильную ширину в layoutSubviews. Например: когда я запускаю это на iPhone SE, ожидаемая ширина равна 320, но изначально я получаю значение, установленное в раскадровке, в данном случае это 414.
Есть ли какой-либо другой метод в UITableviewCell, где я мог бы получить фактическую ширину вида?
Также я могу заставить его работать, если я добавляю таймер с задержкой 0,1 se c, но это похоже на взлом, хотел чтобы узнать, есть ли другой способ.
Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.update), userInfo: nil, repeats: false)
@objc func update() {
print("Width = \(testView.frame.width)") //Works fine
testLabel.text = "Testview Frame width is =\(testView.frame.width)"
}