Не могу получить размеры UIVew - PullRequest
0 голосов
/ 30 июня 2018

Я добавляю UIViews динамически в коде. Есть много мнений, которые я хочу добавить. Вот, например, один:

let typeImage = UIImageView()
typeImage.translatesAutoresizingMaskIntoConstraints = false
rootView.addSubview(typeImage)
typeImage.widthAnchor.constraint(equalToConstant: 28).isActive = true
typeImage.heightAnchor.constraint(equalToConstant: 28).isActive = true
typeImage.leftAnchor.constraint(equalTo: rootView.leftAnchor, constant: 4).isActive = true
typeImage.topAnchor.constraint(equalTo: rootView.topAnchor, constant: 4).isActive = true
typeImage.backgroundColor = gh.myRed
typeImage.image = UIImage(named: "ic_question_bej")

Я хочу посчитать сумму всех элементов, которые я добавляю, и, наконец, установить это подсчитанное значение в высоту моего корневого представления. Проблема в том, что

typeImage.frame.size.height
typeImage.bounds.size.height

всегда возвращать 0.0

Так, как я могу получить высоту в CGFloat недавно добавленного UIView через код? Может быть, я должен установить высоту rootview, чтобы обернуть все мои подпредставления по-другому?

Редактировать

Xcode загружает представление с некоторой задержкой, и если вы попытаетесь получить размер представления сразу после добавления его в родительский режим, вы получите 0.0 размеров.

Вы должны позвонить yourCustomView.layoutIfNeeded(), прежде чем проверять размеры.

Спасибо Chenjtc за правильный ответ.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

вы можете добавить код следующим образом: typeImage.layoutIfNeeded() перед кодом:
typeImage.frame.size.height typeImage.bounds.size.height ограничение не будет размещено сразу, вы должны использовать layoutIfNeeded для размещения представления, тогда вы можете получить th frame

0 голосов
/ 30 июня 2018

Если вам нужна сумма высоты нескольких представлений в CGFloat, вы можете сделать это следующим образом:

let viewHeight = self.view.frame.height  //this in CGFloat
let sumHeight = viewHeight + ... other UIViews
print(sumHeight) // 568.0 for iPhone SE

или если вы хотите установить новую высоту UIView, вы можете сделать это, изменив:

typeImage.heightAnchor.constraint(equalToConstant: 28).isActive = true

//

Кому:

typeImage.heightAnchor.constraint(equalTo: self.view.heightAnchor, multiplier: 1).isActive = true
...