У меня есть два вида: один UIView
и один UIStackView
let mainView = UIView()
mainView.translatesAutoresizingMaskIntoConstraints = false
let stackView = UIStackView()
stackView.axis = .vertical
stackView.translatesAutoresizingMaskIntoConstraints = false
Они оба добавляются в superView
с этими ограничениями
NSLayoutConstraint.activate([
mainView.topAnchor.constraint(equalTo: view.topAnchor),
mainView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
mainView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
stackView.topAnchor.constraint(equalTo: mainView.bottomAnchor),
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
Когда обаUIView
и UIStackView
не содержит никаких других видов, я получаю предупреждения для обоих видов в debugger
Высота неоднозначна для просмотра
Высота и вертикальПозиция неоднозначна для uistackview
Но если я добавлю UIButton
к UIStackView
, а затем установлю его скрытым с .isHidden = true
, оба предупреждения исчезнут, за исключением iOS10
, гдеоба предупреждения остаются.
С или без debugger warnings
Я получаю желаемый результат: если UIStackView
пуст (или все subviews
скрыты), UIView
охватывает весь экран.
Что здесь происходит, почему одно скрытое представление не совпадает с пустым stackView и почему поведение отличается на iOS10
? И наконец, что не менее важно, как я могу удовлетворить iOS10, не ставя под угрозу мою текущую раскладку, которая, похоже, работает для всего после iOS10?