Antwort

0

Ich glaube nicht, dass Sie können, da das ein ziemlich ungewöhnliches Setup ist. In esoterischen Anwendungsfällen wie diesem ist es am besten, den expliziten Initialisierer für NSLayoutConstraint zu verwenden.

0

Aus der Dokumentation von Auto Layout Guide: Visual Format Language

Die Notation vorzieht gute Visualisierung über die Vollständigkeit der Exprimierbarkeit. Die meisten Einschränkungen, die in realen Benutzerschnittstellen nützlich sind, können mit Hilfe der visuellen Formatsyntax ausgedrückt werden, aber es gibt einige, die nicht können. Eine nützliche Einschränkung, die nicht ausgedrückt werden kann, ist ein festgelegtes Seitenverhältnis von (z. B. imageView.width = 2 * imageView.height). Um eine solche Einschränkung zu erstellen, müssen Sie constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: verwenden.

"Breite entspricht Höhe" ist ein Verhältnis (zu 1). Also ist es nicht möglich.

0

Wie bereits erwähnt, weisen die Docs darauf hin, dass Sie mit VFL bestimmte (allgemeine) Constraints nicht setzen können. Hier ist ein einfaches Beispiel für das Hinzufügen nur eine zusätzliche Zeile, um zu bekommen, was Sie wollen.

Sie können dies in einem Spielplatz laufen:

import UIKit 
import PlaygroundSupport 


class TestVC: UIViewController { 

    let squareView: UIView = { 
     let v = UIView() 
     v.translatesAutoresizingMaskIntoConstraints = false 
     v.backgroundColor = .green 
     return v 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = .yellow 

     // add the subview 
     view.addSubview(squareView) 

     //Views to add constraints to 
     let views = Dictionary(dictionaryLiteral: ("sqV", squareView)) 

     // 40 points from left, width of 100 
     let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|-40-[sqV(==100)]", options: [], metrics: nil, views: views) 
     view.addConstraints(horizontalConstraints) 

     // 40 points from top, no height setting 
     let verticalConstraints = NSLayoutConstraint.constraints(withVisualFormat: "V:|-40-[sqV]", options: [], metrics: nil, views: views) 
     view.addConstraints(verticalConstraints) 

     // set height equal to width (1:1 ratio) 
     squareView.heightAnchor.constraint(equalTo: squareView.widthAnchor, multiplier: 1.0).isActive = true 

    } 

} 

let vc = TestVC() 
PlaygroundPage.current.liveView = vc 
Verwandte Themen