2017-02-23 93 views
1

我是iOS開發新手。我有一個contentViewUICollectionViewCell,我想添加另一個視圖。我希望這個新視圖能夠延伸到contentView的邊緣。我試圖做到這一點使用自動版式,所以這裏是我做過什麼:AutoLayout:子視圖越過父視圖的界限

let view = UIView(); 
view.backgroundColor = UIColor.yellow 
contentView.addSubview(view) 

view.translatesAutoresizingMaskIntoConstraints = false 
view.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true 
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true 
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).isActive = true 
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).isActive = true 

這和預期一樣,我得到了我想要的行爲。然後,我希望contentView有18分的填充,所以我想,我需要添加常數參數,並將其設置爲18這樣的:

view.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 18).isActive = true 
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 18).isActive = true 
view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 18).isActive = true 
view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: 18).isActive = true 

我所期待的是,新的觀點,現在會比以前有更小的面積,因爲它現在從各個方向推了18點。我所得到的是一個與第一個場景相同的視圖,它從頂部和左側向前推進了18個點,並且越過了contentView的界限!

能否請你告訴我什麼是錯我的代碼?

+0

嘗試-18而不是頂部和左側 –

+0

如果你開不使用自動版式,你可以用一個線很容易做到這一點:'view.frame =內容查看。 bounds.insetBy(dx:18,dy:18)' –

回答

2

你的常量在都指向同一方向,這樣的觀點只是抵消。

這應該工作:

view.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 18).isActive = true 
view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -18).isActive = true 
view.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 18).isActive = true 
view.rightAnchor.constraint(equalTo: contentView.rightAnchor, constant: -18).isActive = true 
相關問題