Границы UIStackView равны нулю после создания

У меня есть подкласс UIStackView

final class MyStack : UIStackView {
  required init(coder: NSCoder) {
    super.init(coder: coder)
    setup()
  }
  
  override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
  }
  
  private func setup() {
    backgroundColor = .clear
    axis = .horizontal
    contentMode = .scaleAspectFit
    
    alignment = .fill
    distribution = .fillProportionally
    spacing = 0
    
    contentMode = .scaleToFill
    isUserInteractionEnabled = true
    
    autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin, .flexibleWidth, .flexibleHeight]
    translatesAutoresizingMaskIntoConstraints = true
    
  }

func setupSymbols(_ amount:Int) {
  let large = UIImage.SymbolConfiguration(scale: .large)

  for index in 0..< number {
    let image = UIImage(systemName: "trash", withConfiguration: large)
    let highlightedImage = UIImage(systemName: "trash.fill", withConfiguration: large)

    let imageView = UIImageView(image: image, highlightedImage: highlightedImage)
    self.addArrangedSubview(oneStar)
  }
}

На ViewController я создаю экземпляр этого класса

let myStack = MyStack()

myStack.setupSymbols(5)
self.view.addSubview(myStack)

print (myStack.frame)

последняя строка дает мне ширину и высоту, равные нулю!!!

Зачем?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
3
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рамка представления не будет обновлена ​​до следующего прохода макета. Фрейм не вычисляется сразу после добавления представления в иерархию представлений, поэтому вы видите, что оно равно нулю.

Если вы переопределите метод viewDidLayoutSubviews контроллера представления и проверите там кадр, он, скорее всего, будет ненулевым.

Другие вопросы по теме