Визуальный формат Язык не может быть использована для каждого возможного случая. Я считаю, что совмещение двух взглядов друг с другом - такой случай.
Я хотел бы предложить вам использовать макет якоря, как это:
override func viewDidLoad() {
super.viewDidLoad()
let redView = UIView()
redView.backgroundColor = .redColor()
redView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(redView)
let greenView = UIView()
greenView.backgroundColor = .greenColor()
greenView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(greenView)
let redHoriz = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[redView]-20-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redHoriz)
let redVert = NSLayoutConstraint.constraintsWithVisualFormat("V:|-50-[redView]-50-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redVert)
// Set greenView to occupy same space as the redView
greenView.leftAnchor.constraintEqualToAnchor(redView.leftAnchor).active = true
greenView.rightAnchor.constraintEqualToAnchor(redView.rightAnchor).active = true
greenView.topAnchor.constraintEqualToAnchor(redView.topAnchor).active = true
greenView.bottomAnchor.constraintEqualToAnchor(redView.bottomAnchor).active = true
}
Визуального формата Язык позволяет выровнять части просмотров. Например, вы можете выровнять вершины дна двух видов, передав [.AlignAllTop, .AlignAllBottom]
как аргумент options
constraintsWithFormat
. Но вы можете выровнять только значения, которые перпендикулярны направлению визуального формата . Итак, если вы указываете горизонтальный макет, то вы можете выровнять вершины и нижние видов. Если вы указываете вертикальный макет, вы можете выровнять слева и права.
Вы можете выровнять два вида, введя два дополнительных вида. В приведенном ниже примере, синий вид поднимает сверху и нижний выравнивание красного зрения, а желтый вид подхватывает оставил и вправо выравнивание красного зрения. Тогда зеленый вид получает выровнен по верхней и нижней синего зрения и оставил и право желтого зрения, таким образом, чтобы оно располагалось на красный взгляд.
И, наконец, скрытие синего и желтого видов оставляет вас с желаемой настройкой.
let redView = UIView()
redView.backgroundColor = .redColor()
redView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(redView)
let greenView = UIView()
greenView.backgroundColor = .greenColor()
greenView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(greenView)
let blueView = UIView()
blueView.translatesAutoresizingMaskIntoConstraints = false
blueView.backgroundColor = .blueColor()
blueView.hidden = true
view.addSubview(blueView)
let yellowView = UIView()
yellowView.translatesAutoresizingMaskIntoConstraints = false
yellowView.backgroundColor = .yellowColor()
yellowView.hidden = true
view.addSubview(yellowView)
let redHoriz = NSLayoutConstraint.constraintsWithVisualFormat("H:|-80-[redView]-80-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redHoriz)
let redVert = NSLayoutConstraint.constraintsWithVisualFormat("V:|-80-[redView]-80-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redVert)
let blueHorizVert = NSLayoutConstraint.constraintsWithVisualFormat("H:[redView][blueView]|", options: [.AlignAllTop, .AlignAllBottom], metrics: nil, views: ["redView": redView, "blueView": blueView])
NSLayoutConstraint.activateConstraints(blueHorizVert)
let yellowHorizVert = NSLayoutConstraint.constraintsWithVisualFormat("V:[redView][yellowView]|", options: [.AlignAllLeft, .AlignAllRight], metrics: nil, views: ["redView": redView, "yellowView": yellowView])
NSLayoutConstraint.activateConstraints(yellowHorizVert)
let greenTopBottom = NSLayoutConstraint.constraintsWithVisualFormat("H:[greenView][blueView]|", options: [.AlignAllTop, .AlignAllBottom], metrics: nil, views: ["greenView": greenView, "blueView": blueView])
NSLayoutConstraint.activateConstraints(greenTopBottom)
let greenLeftRight = NSLayoutConstraint.constraintsWithVisualFormat("V:[greenView][yellowView]|", options: [.AlignAllLeft, .AlignAllRight], metrics: nil, views: ["greenView": greenView, "yellowView": yellowView])
NSLayoutConstraint.activateConstraints(greenLeftRight)
Таким образом, вы можете сделать это с ЛВЖ, но это не так элегантно. Я бы посоветовал вам использовать якоря.
Читая документы? Это не сайт «сделай мою работу для меня». Возьмите удар, чтобы сделать это самостоятельно, и если вы не можете заставить его работать, разместите здесь свой код, и мы поможем вам его отладить. –
@ DuncanC Я не думаю, что это неуместный вопрос. Я работаю над этим. Я все еще работаю над этим прямо сейчас. Я не видел ни одного подобного вопроса, размещенного на SO, поэтому я разместил его. И я подумал, что это простой, достаточно ясный вопрос, что мне не нужно публиковать мой неправильный код. Я буду искать больше и выложить позже. – allenlinli