Я создал пользовательский подкласс UIView в моем приложении iOS, и я пытаюсь получить рассчитанные размеры представления в методе init, поэтому я могу использовать их при создании подзаголовков внутри пользовательского представления.Получение размера UIView в init
Пользовательский вид находится внутри представления стека, которое присваивает мой вид 1/3 общей высоты (основного вида).
Мой INIT выглядит следующим образом:
var mySubView: UIImageView
required init?(coder aDecoder: NSCoder) {
mySubView = UIImageView()
super.init(coder: aDecoder)
let viewWidth = Int(self.frame.size.width)
let viewHeight = Int(self.frame.size.height)
mySubView.frame = CGRect(x: 0, y: 0, width: viewWidth, height: viewHeight)
mySubView.backgroundColor = UIColor.cyan
self.addSubview(mySubView)
}
Однако, высоты и ширины не сообщается правильно. Например, mySubView выше только заканчивается заполнением около половины от общего объема пользовательского представления.
Любая помощь была бы принята с благодарностью!
Я не думаю, что представление знает, что это размеры в этот момент на протяжении всего жизненного цикла. Попробуйте получить размеры в 'viewWillAppear' – toddg
Вы не можете, а не если это вид контроллера представления. Слишком рано в жизненном цикле контроллера. Вам нужно подождать до (как можно раньше) UIViewController.viewwilllayoutSubviews(). По этой причине вы, вероятно, должны использовать ограничения автоматической компоновки, многие из которых уже обрабатываются представлением стека. Создайте свое собственное представление, добавьте subviews и ограничения (в IB или коде) к пользовательскому представлению, и оно будет раскрывать то, как вам нужно. – dfd
@toddg верен, альтернативой viewWillLayoutSubviews() (используется UIViewController) является viewWillAppear() (используется UIView). Я склонен думать с точки зрения контроллера зрения. ОСТОРОЖНО: Я считаю, что обе функции можно назвать более одного раза при загрузке, а также о таких вещах, как изменения ориентации (и в iPad, многозадачность). – dfd