Я пытаюсь использовать preservesSuperviewLayoutMargins
через иерархию вложенных представлений, но сталкиваясь с множеством проблем с UIKit и задаваясь вопросом, что я делаю неправильно (или это настоящая ошибка).Как использовать preserveesSuperviewLayoutMargins во вложенных представлениях
Я пытаюсь выложить несколько взглядов (некоторые на стороне друг друга, некоторые друг над другом), как так:
// Various combinations here will create different visual results (it will either work or won't)
let i1 = ImageView()
//let i1 = LabelView()
let i2 = ImageView()
//let i2 = LabelView()
let i3 = ImageView()
//let i3 = LabelView()
let view = LeftRight(left: i1, right: TopBottom(top: i2, bottom: i3))
//let view = LeftRight(left: TopBottom(top: i2, bottom: i3), right: i1)
С некоторыми компоновщика я могу заставить его работать, как показано ниже. Вы можете видеть, что изображения справа правильно отступают от зеленого вида, который, в свою очередь, правильно отступил от белого представления.
Но с другими я борюсь:
Запуск код, подобный этому в приложение, которое я могу получить полную блокировку и памяти беглеца.
отступов осуществляется с помощью layoutMargins
так:
let masterView = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
masterView.translatesAutoresizingMaskIntoConstraints = false
masterView.layoutMargins = UIEdgeInsets(top: 5.0, left: 5.0, bottom: 5.0, right: 5.0)
let subView = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
subView.translatesAutoresizingMaskIntoConstraints = false
subView.layoutMargins = UIEdgeInsets(top: 5.0, left: 5.0, bottom: 5.0, right: 5.0)
Вот образец макета изображения с детской площадкой. The full playground project can be found here и можно легко загрузить и запустить в XCode, чтобы понять, что я имею в виду.
class ImageView: UIView {
init() {
super.init(frame: CGRect(x: 0, y: 0, width: 1000, height: 1000))
self.preservesSuperviewLayoutMargins = true
self.layoutMargins = .zero
let imageView = UIImageView(image: UIImage(named: "jesus"))
imageView.contentMode = .center
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.clipsToBounds = true
self.clipsToBounds = true
imageView.backgroundColor = UIColor.red
self.addSubview(imageView)
imageView.leftAnchor.constraint(equalTo: self.layoutMarginsGuide.leftAnchor).isActive = true
imageView.rightAnchor.constraint(equalTo: self.layoutMarginsGuide.rightAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: self.layoutMarginsGuide.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: self.layoutMarginsGuide.bottomAnchor).isActive = true
}
}
Я не могу понять, что проблема в случае «других». Вы показываете нам только черный экран, но никакого кода. Не могли бы вы добавить некоторые подробности? –
код находится на детской площадке. Это довольно много, поэтому я только показал основы здесь. Черный экран - это потому, что система компоновки просто не отображается! – Sam