簡體   English   中英

與視覺布局約束相對應的代碼是什么?

[英]What is the code corresponding to the visual layout constraint?

與視覺布局約束相對應的代碼是什么? 我想將其轉換為NSLayoutConstraint.activate([])格式。

scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))

stackView = UIStackView()
scrollView.addSubview(stackView)

scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))

該片段來自簡單滾動UIStackView

視覺格式語言(VFL)可以同時創建多個約束,而這些約束確實可以。 前三個VFL分別創建2個約束,最后一個創建一個約束。

我建議使用布局錨來創建約束。 這與使用NSLayoutConstraint.activate()和布局錨點的代碼等效:

scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)

NSLayoutConstraint.activate([
    scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
    scrollView.topAnchor.constraint(equalTo: view.topAnchor),
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

stackView = UIStackView()
scrollView.addSubview(stackView)

NSLayoutConstraint.activate([
    stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
    stackView.topAnchor.constraint(equalTo: scrollView.topAnchor)
])

筆記:

  1. 我研究了.alignAllCenterX對產生的約束的影響,在這種情況下,該選項.alignAllCenterX
  2. 如果 創建約束之前添加了兩個子視圖 可以將所有約束組合到單個NSLayoutConstraint.activate()調用中。 我認為通過兩次調用就更清楚了,因為每組都有一個目的。
  3. NSLayoutConstraint.activate()很聰明,它將約束添加到適當的視圖。 它是首選,自iOS 8起已可用。
  4. 確保設置stackView.translatesAutoresizingMaskIntoConstraints = falsestackView.axis = .vertical (您可能只是將那些問題排除在外,以使其更加簡潔)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM