空間視野均勻
通常希望兩個檢視並排,以超級檢視為中心。Stack Overflow 上給出的常見答案是將這兩個檢視嵌入 UIView
並將 UIView
置於中心。這不是必需的或推薦的。來自 UILayoutGuide 文件:
將虛擬檢視新增到檢視層次結構中會產生許多成本。首先,建立和維護檢視本身是成本。其次,虛擬檢視是檢視層次結構的完整成員,這意味著它會增加層次結構執行的每個任務的開銷。最糟糕的是,隱形虛擬檢視可以攔截用於其他檢視的訊息,從而導致很難找到的問題。
你可以使用 UILayoutGuide
執行此操作,而不是將按鈕新增到不必要的 UIView
中。UILayoutGuide
本質上是一個可以與自動佈局互動的矩形空間。你在按鈕的左側和右側放置了一個 UILayoutGuide
,並將它們的寬度設定為相等。這將使按鈕居中。以下是如何在程式碼中執行此操作:
視覺格式語言風格
view.addSubview(button1)
view.addSubview(button2)
let leftSpace = UILayoutGuide()
view.addLayoutGuide(leftSpace)
let rightSpace = UILayoutGuide()
view.addLayoutGuide(rightSpace)
let views = [
"leftSpace" : leftSpace,
"button1" : button1,
"button2" : button2,
"rightSpace" : rightSpace
]
// Lay the buttons and layout guides out horizontally in a line.
// Put the layout guides on each end.
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[leftSpace][button1]-[button2][rightSpace]|", options: [], metrics: nil, views: views))
// Now set the layout guides widths equal, so that the space on the
// left and the right of the buttons will be equal
leftSpace.widthAnchor.constraintEqualToAnchor(rightSpace.widthAnchor).active = true
錨式
let leadingSpace = UILayoutGuide()
let trailingSpace = UILayoutGuide()
view.addLayoutGuide(leadingSpace)
view.addLayoutGuide(trailingSpace)
leadingSpace.widthAnchor.constraintEqualToAnchor(trailingSpace.widthAnchor).active = true
leadingSpace.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor).active = true
leadingSpace.trailingAnchor.constraintEqualToAnchor(button1.leadingAnchor).active = true
trailingSpace.leadingAnchor.constraintEqualToAnchor(button2.trailingAnchor).active = true
trailingSpace.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor).active = true
你還需要為此新增垂直約束,但這將使按鈕在檢視中居中,而不新增任何虛擬檢視! 這將節省系統在顯示那些虛擬檢視時浪費 CPU 時間。此示例使用按鈕,但你可以將按鈕交換為要為其設定約束的任何檢視。
如果你支援 iOS 8 或更早版本,則建立此佈局的最簡單方法是新增隱藏的虛擬檢視。使用 iOS 9,你可以使用佈局指南替換虛擬檢視。
注意:Interface Builder 尚不支援佈局指南(Xcode 7.2.1)。因此,如果要使用它們,則必須在程式碼中建立約束。來源 。