簡體   English   中英

迅捷:如何在代碼中使用約束與乘數

[英]swift: how to use constraints with multiplier in code

我有一個自定義視圖,我想添加一個圖像,使其底部錨點位於視圖的3/4。 在情節提要中,我將使用第一項imgview.bottom,第二項view.bottom,常數0和乘數0.75設置約束

在代碼中,我嘗試過:

let imgview = UIImageView(image: img)
imgview.translatesAutoresizingMaskIntoConstraints = false
addSubview(imgview)
NSLayoutConstraint.activate([
    imgview.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.4),
    imgview.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.4),
    imgview.centerXAnchor.constraint(equalTo: centerXAnchor),
    imgview.bottomAnchor.constraint(equalToSystemSpacingBelow: bottomAnchor, multiplier: 0.75)
    ])

但是圖像的底部甚至低於視圖的底部。 如果我使用bottomAnchor.constraint(equalToSystemSpacingBelow: imgview.bottomAnchor, multiplier: 0.75)

它高於它,但仍然太低。 我該怎么做呢?

我會使用equalTo:,constant:完成的

let frameHeight = frame.height
let padding = frameHeight * 0.25
imgview.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -padding)

如果尚未加載視圖,則幀值可能返回0。

override func layoutSubviews() {
super.layoutSubviews()
if self.frame.height > 0 {
//Add constraints here
}
}

用最后一種方式對最后一種使用約束創建:

let imgview = UIImageView(image: img)
imgview.translatesAutoresizingMaskIntoConstraints = false
addSubview(imgview)
NSLayoutConstraint.activate([
    imgview.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.4),
    imgview.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.4),
    imgview.centerXAnchor.constraint(equalTo: centerXAnchor),
/// imgview.bottomAnchor.constraint(equalToSystemSpacingBelow: bottomAnchor, multiplier: 0.75)
    ])

let constraint = NSLayoutConstraint(item: imgview, attribute: .bottom, 
                                    relatedBy: .equal, 
                                    toItem: view, attribute: .bottom, 
                                    multiplier: 0.75, constant: 0)
constraint.isActive = true

暫無
暫無

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

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