我正在從事一個 Swift 專案,但有一點我不清楚以編程方式制作 UI。我試圖在螢屏上顯示一個簡單的 UIView。
lazy var container: UIView = {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
view.backgroundColor = UIColor.systemImageGray()
view.layer.cornerRadius = view.layer.bounds.width / 2
view.clipsToBounds = true
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(container)
setupConstraints()
}
func setupConstraints() {
container.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
container.topAnchor.constraint(equalTo: self.topAnchor, constant: 14),
container.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -14),
container.widthAnchor.constraint(equalToConstant: 30),
container.heightAnchor.constraint(equalToConstant: 30)
])
}
上面的代碼作業正常,但由于我設定了兩次和高度,我覺得它是多余的,就像UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))在 setupConstraints 中設定寬度和高度約束一樣。
由于我在 UIView 的框架中設定了寬度和高度,因此我認為我不需要在 setupConstraints 中設定寬度和高度約束,但是除非我再次添加寬度和高度約束,否則它不會顯示視圖。那么在這種情況下,為什么我不能在 UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30)) 中設定寬度和高度,而且我還必須再次添加寬度/高度約束?
uj5u.com熱心網友回復:
frame 當您不使用 Autolayout 引擎放置視圖時非常有用。
當你這樣做時:
container.translatesAutoresizingMaskIntoConstraints = false
您明確告訴引擎忽略框架,并且您負責應用一組新的約束。
因此你最終會這樣做:
NSLayoutConstraint.activate([
container.topAnchor.constraint(equalTo: self.topAnchor, constant: 14),
container.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -14),
container.widthAnchor.constraint(equalToConstant: 30),
container.heightAnchor.constraint(equalToConstant: 30)
])
根據 Autolayout 的期望設定定位和動態大小調整。
翻譯AutoresizingMaskIntoConstraints
一個布林值,用于確定視圖的自動調整大小掩碼是否轉換為自動布局約束。
參考:https : //developer.apple.com/documentation/uikit/uiview/1622572-translatesautoresizingmaskintoco
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322505.html
下一篇:在Swift中回圈物件陣列
