2017-04-04 45 views
0

我在View Controller上有Imageview和UIView。如果Imageview爲零或圖像不可用,那麼UIView將替換它的位置。是否有任何知道如何使用自動佈局?根據ImageView的大小更改視圖位置

enter image description here

對於試圖目的,我有固定的高度和兩(ImageView的和的UIView)的寬度。 Imageview具有「頂部8像素」和「容器中的水平」邊緣。 UIView具有「Imageview中的頂部0」和「容器中的水平」邊緣。將Imageview設置爲零,但不起作用。

+2

你必須這樣做的代碼,如果圖像=零則使圖像視圖的HIGHT約束爲零。或者你可以把它們放在堆棧視圖中 –

+0

你不需要指定圖像的高度。圖像將具有壓縮優先級所需的佔位空間。所以如果你沒有圖像的話,高度將會是0,但是如果你的高度是image.size。身高 – Sergey

+0

感謝Inder Kumar它的工作原理 – nadim

回答

0

您可以通過使用自動佈局優先考慮約束條件來管理這一點。從ImageView和TopLayout提供您的UIView頂部空間。從頂部佈局指南給出頂部空間的約束(小於1000的任何值)分配較低的優先級。如果你的圖像是零,使用imageview.RemoveFromSuperView()從視圖中刪除圖像視圖,UIView將自動採取下一個約束,即從TopLayout指南。我附上了一個截圖,可以在storyBoard上找到約束的優先級。

enter image description here

+0

謝謝你的回覆,但它不工作。 UIView位置沒有改變,Imageview從控制器中刪除。 – nadim

0

UIImageView高度約束的出口,做下面的代碼

if (imageview == nil){ 
    imageViewHeightConstraint.constant = 0 
} 
else{ 
    imageViewHeightConstraint.constant = 60 
} 

而其他查詢,你可以問。

1

一個好的建議是將圖像視圖和視圖添加到堆棧視圖中,然後按照以下步驟中提到的步驟操作:UIStackView Distribution Fill Equally

然而,就可以實現你有什麼要求加入底視圖和頂面佈置導向之間的附加約束:

enter image description here

,然後設置其priority值小於默認情況下(1000)-in我的例子,我將它設置爲500-和其constant值設置爲0:

enter image description here

其外觀應顯示爲虛線,這意味着還有一個約束 - 具有較高的優先級值 - 決定視圖的x軸,如果此約束已被移除/取消激活,則應激活虛線。

最後,確保如果有,你必須從它的超視圖中刪除圖像視圖沒有可用的圖像(調用imageView.removeFromSuperview()),將其設置爲隱藏或設置其Alpha爲0.0不激活點約束:

class ViewController: UIViewController { 
    //... 

    @IBOutlet weak var imageView: UIImageView! 

    // I'm checking in 'viewDidLoad' method just for describing purposes, 
    // of course, you can do the check when needed... 
    override func viewDidLoad() { 
     // if there is something wrong, you should call: 
     imageView.removeFromSuperview() 
    } 

    //... 
} 

輸出將是:

enter image description here