Получить фактическую ширину подпредставления в UITableviewCell - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь получить ширину одного из моих подпредставлений в ячейке UITableview. Ниже приведен макет раскадровки. Здесь я пытаюсь получить ширину testView программно.

Это мой класс ячеек.

enter image description here

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)"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...