我想創建一個橫向級聯的對象數組,我試圖創建一個函數來減少我的代碼的大小,但是,似乎可能有一個NSLayoutConstraint之間的衝突創建的對象可能是?以編程方式創建一個swift對象數組3
這裏是我的代碼
private func createProfileImageContainers(numberOfFriends: Int) {
for friends in 1...numberOfFriends {
let imageViewContainer = UIView()
imageViewContainer.translatesAutoresizingMaskIntoConstraints = false
imageViewContainer.backgroundColor = UIColor.blue
imageViewContainer.frame = CGRect(x: 0, y: 0, width: frame.width/10, height: frame.width/10)
NSLayoutConstraint(item: imageViewContainer, attribute: .centerX, relatedBy: .equal, toItem: container, attribute: .centerX, multiplier: CGFloat((1/2) + ((friends - 1)/50)), constant: 0).isActive = true
NSLayoutConstraint(item: imageViewContainer, attribute: .centerY, relatedBy: .equal, toItem: container, attribute: .centerY, multiplier: 1, constant: 0).isActive = true
addSubview(imageViewContainer)
}
}
下面是調試器說
0的乘數或與對第一屬性的位置的零秒在一起的項目將創建等於一個位置的非法拘禁不變。位置屬性必須成對指定。'
有什麼建議嗎?
編輯:
感謝搶劫的答案,我能夠與調試然而imageViewContainer只有一個實例正在加入到解決問題。可能是因爲它們都被添加到具有相同名稱的視圖層次結構中,因此每個新視圖都取代了最後一個視圖... 我認爲創建一個類將解決此問題,但現在我無法獲取任何內容。
這裏是更新的代碼...
class profileImageContainer: UIView {
let imageViewContainer: UIView = {
let iv = UIView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.backgroundColor = UIColor.blue
return iv
}()
}
private func createProfileImageContainers(numberOfFriends: Int) {
for friends in 1...numberOfFriends {
print(friends)
let imageViewContainer = profileImageContainer()
addSubview(imageViewContainer)
NSLayoutConstraint(item: imageViewContainer, attribute: .width, relatedBy: .equal, toItem: container, attribute: .width, multiplier: 0.1, constant: 0).isActive = true
NSLayoutConstraint(item: imageViewContainer, attribute: .height, relatedBy: .equal, toItem: container, attribute: .width, multiplier: 0.1, constant: 0).isActive = true
NSLayoutConstraint(item: imageViewContainer, attribute: .centerX, relatedBy: .equal, toItem: container, attribute: .centerX, multiplier: 0.5 + (CGFloat(friends - 1)/50.0), constant: 0).isActive = true
NSLayoutConstraint(item: imageViewContainer, attribute: .centerY, relatedBy: .equal, toItem: container, attribute: .centerY, multiplier: 1, constant: 0).isActive = true
}
}
喜歡的UITableView或UIStackView的一樣。 – luckyShubhra
不應該'centerX'乘數乘以容器的寬度? – NRitH
@NRitH乘數是一個乘數,它可以是任何數字。在那裏的代碼只是一個佔位符atm,但它仍然應該是有效的。我只是想測試for循環。 – Stefan